我们已经完成工具类的设计,即从SqlSessionFactory中获取SqlSession,那么如何使用SqlSession来执行Sql语句呢?
假设我们现在已经有一张User表,并且里面存了一些信息,现在我想对这张表执行CRUD
传统方法
传统方法中我们需要建立一个Dao包,在Dao包里面有接口以及接口实现类,每增加一个新的接口方法就需要新增一个实现类,实现类类里的方法就是对数据库的操作,增删改查之类的。
Mapper代理方法
在这种方法中,接口类中每增加一个方法,只需要在xml中新增一个标签。
UserMapper.java:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package com.xliu.dao;
<!-- User的实体类 -->
import com.xliu.pojo.User;
import java.util.List;
public interface UserMapper {
<!-- 定义一个抽象方法getUser(),返回类型是一个User类型的List -->
List<User> getUser();
// 根据Id查询用户
User getUserById(int id);
void addUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
UserMapper.xml:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26<?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="com.xliu.dao.UserMapper">
<select id="getUser" resultType="com.xliu.pojo.User">
select * from mybatis.user
</select>
<select id="getUserById" resultType="com.xliu.pojo.User" parameterType="int">
select * from mybatis.user where id = #{id}
</select>
<insert id="addUser" parameterType="com.xliu.pojo.User">
insert into mybatis.user (id, name, pwd) values (#{id},#{name},#{pwd});
</insert>
<update id="updateUser" parameterType="com.xliu.pojo.User">
update mybatis.user set name=#{name}, pwd=#{pwd} where id=#{id};
</update>
<delete id="deleteUser" parameterType="int">
delete from mybatis.user where id=#{id};
</delete>
</mapper>
UserMapper.xml文件中,namespace对应接口,select id对应接口(namespace)中的方法名,resultType对应Sql语句执行的返回类型,如果接口方法有输入值的话,则添加属性parameterType。
另外需要注意的是增删改查的SQL语句对应的标签是不同的。
另外一定要记住,在/resources/config.xml中要添加Mapper.xml的映射:
config.xml:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="pwd"/>
</dataSource>
</environment>
</environments>
<!-- 添加Mapper.xml的映射 -->
<mappers>
<mapper resource="com/xliu/dao/UserMapper.xml"/>
</mappers>
</configuration>
测试
1 | package com.xliu.dao; |
需要记住:执行完一次之后需要sqlSession.close()
,增删改的语句需要提交事务sqlSession.commit()