开发步骤
第一步:引入jar包(略)
第二步:在资源文件下创建一个SqlMapConfig.xml核心配置文件(略)
第三步:在com.pp包下面创建一个pojo包,作为实体类包。然后创建一个User类。(略)
第四步:在com.pp包下创建一个dao包, 在dao层创建UserDao接口类
package com.pp.dao;
import com.pp.pojo.User;
import java.util.List;
public interface UserDao {
// 按照用户名和性别查找
List<User> findUserByUserNameAndSex(String name,String sex);
}
第五步:在dao层创建UserDaoImpl实现类继承和实现UserDao接口类的抽象方法
package com.pp.dao;
import com.pp.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class UserDaoImpl implements UserDao{
/*
*
* 1.有会话工厂
* 2.初始化sqlseesion
* 3.
* */
//新建sqlSessionFactory会话工厂
private SqlSessionFactory sqlSessionFactory;
//构造方法,是创建UserDaoImpl类,谁就要使用构造方法,然后把会话工厂也拿到
public UserDaoImpl( SqlSessionFactory sqlSessionFactory){
this.sqlSessionFactory=sqlSessionFactory;
}
public List<User> findUserByUserName(String name) {
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> list =sqlSession.selectList("pp.findUserByUserName", name);
return list;
}
}
这里重点关注findUserByUserName()方法,首先进行工厂的开启会话,然后调用会话工厂的selectList()第一个参数使用sqlMapperConfig.xml的
第六步:在com.pp下创建的mapper包中新建一个UserMapper接口
package com.pp.mapper;
import com.pp.pojo.User;
import java.util.List;
public interface UserMapper {
List<User> findUserByUserName(String name);
}
第七步:UserMapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pp">
<select id="findUserByUserName" parameterType="string" resultType="com.pp.pojo.User">
select * from user where username like '%${value}%'
</select>
</mapper>
标签中 ,id填写UserMapper接口中的findUserByUserName()方法名,parameterType代表入口参数这里填写string,resultType代表返回结果,参数指向放回的user类的包路径,这里是com.pp.pojo.User。前面的占位符是Interger类型使用的是#{_prams},这里的入口参数类型是String,所以占位符参数使用的是${value}
第八步:编写测试类
...
...
...
public class UserTest {
private SqlSessionFactory factory;
@Test
@Before
public void Setup() throws IOException {
String res="SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(res);
factory=new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void fun2(){
UserDaoImpl userDao = new UserDaoImpl(factory);
List<User> list = userDao.findUserByUserName("王");
System.out.println(list);
}
}
第九步:测试结果
后续:前面整个步骤过程已经演示的很清楚了,后面的快速演示。
第一步:在dao层包下的UserDao写入下面方法
package com.pp.dao;
import com.pp.pojo.User;
import java.util.List;
public interface UserDao {
// 按照用户名和性别查找
List<User> findUserByUserNameAndSex(String name,String sex);
//插入用户
Integer insertUser(User user);
}
第二步:在dao层包下的UserDaoImpl写入下面方法
package com.pp.dao;
import com.pp.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class UserDaoImpl implements UserDao{
//新建sqlSessionFactory会话工厂
private SqlSessionFactory sqlSessionFactory;
//构造方法,是创建UserDaoImpl类,谁就要使用构造方法,然后把会话工厂也拿到
public UserDaoImpl( SqlSessionFactory sqlSessionFactory){
this.sqlSessionFactory=sqlSessionFactory;
}
public List<User> findUserByUserNameAndSex(String name, String sex) {
User user = new User();
user.setUsername(name);
user.setSex(sex);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> list = sqlSession.selectList("pp.findUserByUserNameAndSex", user);
return list;
}
public Integer insertUser(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
int insert = sqlSession.insert("pp.insertUser", user);
sqlSession.commit();
return insert;
}
}
第三步:在UserMapper接口类中写入以下方法
package com.pp.mapper;
import com.pp.pojo.User;
import java.util.List;
public interface UserMapper {
List<User> findUserByUserNameAndSex(String name,String sex);
Integer insertUser(User user);
}
第四步:在UserMapper.xml中写入下面配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pp">
<select id="findUserByUserNameAndSex" parameterType="com.pp.pojo.User" resultType="com.pp.pojo.User">
select * from user
<include refid="user_where"/>
</select>
<sql id="user_where">
<where>
<if test="username !=null and username !=''" >
and username like '%${username}%'
</if>
<if test="sex !=null and sex !=''" >
and sex=#{sex}
</if>
</where>
</sql>
<!--mysql自增主键返回-->
<insert id="insertUser" parameterType="com.pp.pojo.User">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address});
</insert>
<!--
通过修改sql映射文件,可以将mysql自增主键返回:
<insert id="insertUser" parameterType="cn.pp.mybatis.po.User">-->
<!-- selectKey将主键返回,需要再返回
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address});
</insert>
添加selectKey实现将主键返回
keyProperty:返回的主键存储在pojo中的哪个属性
order:selectKey的执行顺序,是相对与insert语句来说,由于mysql的自增原理执行完insert语句之后才将主键生成,所以这里selectKey的执行顺序为after
resultType:返回的主键是什么类型
LAST_INSERT_ID():是mysql的函数,返回auto_increment自增列新记录id值。
-->
</mapper>
第五步:编写测试类
import com.pp.dao.UserDaoImpl;
import com.pp.mapper.UserMapper;
import com.pp.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class UserTest {
private SqlSessionFactory factory;
@Test
@Before
public void Setup() throws IOException {
String res="SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(res);
factory=new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void fun3(){
UserDaoImpl userDao = new UserDaoImpl(factory);
List<User> list = userDao.findUserByUserNameAndSex("王", "男");
System.out.println(list);
}
@Test
public void fun4(){
UserDaoImpl userDao = new UserDaoImpl(factory);
User user = new User();
user.setSex("男");
user.setUsername("对对对");
user.setAddress("西安");
user.setBirthday(new Date());
Integer integer = userDao.insertUser(user);
System.out.println(integer);
}
第六步:测试结果(略)
开发步骤省略部分在MyBatis学习2之入门案例有详细讲解