首先,简要概括一下mybatis 环境搭建步骤
第一步:创建 maven 工程
第二步:导入坐标
第三步:编写必要代码(实体类和持久层接口)
第四步:编写 SqlMapConfig.xml
第五步:编写映射配置文件
第六步:编写测试类
要使用mybatis代理dao实现CRUD有以下要求:
1、持久层接口和持久层接口的映射配置必须在相同的包下
2、持久层映射配置中 mapper 标签的 namespace 属性取值必须是持久层接口的全限定类名(com.xxx.xx.class)
3、SQL 语句的配置标签,,,的 id 属性必须和持久层接口的
方法名相同。
默认你已经搭建好mybatis环境并写好实体类和接口(此链接是环境搭建)(https://mp.csdn.net/mdeditor/96371976#)
一、根据 ID 查询
1.在持久层接口中添加 findById 方法
User findById(Integer userId);
2.在用户的映射配置文件中配置
<!-- 根据 id 查询 -->
<select id="findById" resultType="com.yx.domain.User" parameterType="int">
select * from user where id = #{id}
</select>
此处有些细节问题需要说明
**resultType 属性:**用于指定结果集的类型。
**parameterType 属性:**用于指定传入参数的类型。
**sql 语句中使用#{}字符:**它代表占位符,相当于jdbc的?,都是用于执行语句时替换实际的数据。具体的数据是由#{}里面的内容决定的。
**#{}中内容的写法:**由于数据类型是基本类型,所以此处可以随意写。
3.在测试类添加测试
@Before
public void init() throws IOException {
in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
sqlSession = factory.openSession();
userDao = sqlSession.getMapper(IUserDao.class);
}
@After
public void destory() throws IOException {
sqlSession.commit();
sqlSession.close();
in.close();
}
@Test
public void testFindOneById() {
User user = userDao.findById(41);
System.out.println(user);
}
如此,一个根据用户ID查找用户的功能便实现了。其他查询操作读者可以自行操作试试。
二、保存操作
1.在持久层接口中添加新增方法
int saveUser(User user);
2.在用户的映射配置文件中配置
<!-- 保存用户-->
<insert id="saveUser" parameterType="com.yx.domain.User">
<!-- 配置保存时获取插入的 id -->
<selectKey keyColumn="id" keyProperty="id" resultType="int">
select last_insert_id();
</selectKey>
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
此处有些细节问题需要说明
**parameterType 属性:**代表参数的类型,因为我们要传入的是一个类的对象,所以类型就写类的全名称。
**sql 语句中使用#{}字符:**它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。具体的数据是由#{}里面的内容决定的。
**#{}中内容的写法:**由于我们保存方法的参数是 一个 User 对象,此处要写 User 对象中的属性名称。它用的是 ognl 表达式。
**ognl 表达式:**它是 apache 提供的一种表达式语言,全称是:Object Graphic Navigation Language 对象图导航语言
它是按照一定的语法格式来获取数据的。
语法格式就是使用 #{对象.对象}的方式
#{user.username}它会先去找 user 对象,然后在 user 对象中找到 username 属性,并调用getUsername()方法把值取出来。但是我们在 parameterType 属性上指定了实体类名称,所以可以省略 user.而直接写 username。
3.添加测试类中的测试方法
@Test
public void testSaveUser(){
User user = new User();
user.setUsername("yue");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("合肥");
System.out.println(user);
userDao.saveUser(user);
System.out.println(user);
}
如此,一个增加用户的功能便实现了。
三、用户更新
1.在持久层接口中添加更新方法
int updateUser(User user);
2.在用户的映射配置文件中配置
<update id="updateUser" parameterType="com.yx.domain.User">
update user set username = #{username},birthday=#{birthday},sex=#{sex},address=#{address} where id =#{id}
</update>
3.加入更新的测试方法
@Test
public void testUpdateUser(){
User user = userDao.findById(56);
user.setUsername("xi");
int res = userDao.updateUser(user);
System.out.println(res);
}
如此,一个更新用户信息的功能便实现了。
四、用户删除
1.在持久层接口中添加删除方法
int deleteUserById(Integer id);
2.在用户的映射配置文件中配置
<delete id="deleteUserById" parameterType="int">
delete from user where id = #{id}
</delete>
3.加入删除的测试方法
@Test
public void testDeleteUserById(){
userDao.deleteUserById(56);
}