MyBatis 是 Java Web 开发主流技术栈 SSM 中的一员,是一个基于 JDBC 的数据访问框架。和 Hibernate/JPA 不同,MyBatis 需要你自己写 SQL 语句。所以,严格来说 MyBatis 只能算是一个半自动 ORM 框架,虽然看似使用起来“变麻烦”,但是手写 SQL 可以提供很高的灵活性和性能调优空间。
编写配置文件
entity.xml 映射文件
假设有一个 User 实体模型,新建文件 user.xml
,其中 <mapper>
封装 User 增删改查的 SQL 语句,先写一个 <select>
作例:
<mapper namespace="test">
<select id="findUserById" parameterType="int" resultType="com.example.pojo.User">
SELECT * FROM user WHERE id=<strong>#{id}</strong>
</select>
</mapper>
#{}
是占位符,#{value}
就是把接收到的参数传入查询。运行代码时,MyBatis 操作数据库的实际 SQL 语句是
SELECT * FROM user WHERE id=?
${}
是拼接符,${value}
就是把接收到的参数拼接到 SQL 语句中。%
用于支持模糊查询,如果你的查询语句这样写:
SELECT * FROM user WHERE username LIKE '%${value}'
传入参数“小明”,就可以查到苏小明,张小明,王小明的信息。 MyBatis 操作数据库的实际 SQL 语句是:
SELECT * FROM USER WHERE username LIKE '%小明' // 不建议使用,有 SQL 注入风险
SqlMapConfig.xml 配置文件
配置每个映射文件(mapper 文件)并加载。
|
|
增删改查
引入 junit 进行单元测试。
查询
|
|
注意:需要在工程目录里新建 config 目录(和 src 目录同级),一般把 xml 配置文件放到 config 目录下。如果使用 Intellij IDEA,新建完 config 文件夹需要右键–Make Directory As–Resources Root 把它标记为资源目录,然后就能在代码里直接引用。
插入
先编辑 user.xml,新增语句:
<insert id="insertUser" parameterType="com.xtlog.mybatis.pojo.User">
INSERT INTO USER(username, birthday, sex, address) VALUE (#{username}, #{birthday}, #{sex}, #{address})
</insert>
修改测试程序
|
|
新增用户后获取主键 id 的方法:
(1)如果设置主键自增
修改 mapper:
<insert id="insertUser" parameterType="com.xtlog.mybatis.pojo.User">
<selectKey keyProperty="id" order="AFTER" resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO USER(username, birthday, sex, address) VALUE (#{username}, #{birthday}, #{sex}, #{address})
</insert>
order 设置:AFTER(后执行),就是先执行 insert 语句,然后查询刚插入的自增 ID,再次运行测试程序,数据插入以后,主键会自动注入 pojo 的 id 属性,commit 之后,可以通过 newUser.getId()获取。
(2)如果主键非自增(uuid)
修改 mapper
<insert id="insertUser" parameterType="com.xtlog.mybatis.pojo.User">
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
SELECT uuid()
</selectKey>
INSERT INTO USER(id, username, birthday, sex, address) VALUE (#{id}, #{username}, #{birthday}, #{sex}, #{address})
</insert>
order 设置:BEFORE(先执行),先通过 uuid()函数获取一个 uuid,然后再执行 insert 语句,注意 insert 语句中要写入刚获取的 uuid
再次运行测试程序,数据插入以后,主键会自动注入 pojo 的 id 属性,commit 之后,可以通过 newUser.getId() 获取。
更新
编辑 user.xml,加入 update 语句:
<update id="updateUser" parameterType="com.xtlog.mybatis.pojo.User">
UPDATE USER SET username=#{username}, birthday=#{birthday}, sex=#{sex}, address=#{address} WHERE id=#{id}
</update>
测试程序新建一个 User 实例,然后设置 id(必须,设置为需要修改的用户的 id),设置其他属性,然后执行:
sqlSession.update("test.updateUser", user);
删除
编辑 user.xml,加入 delete 语句:
<delete id="deleteUser" parameterType="int" >
DELETE FROM USER WHERE id=#{id}
</delete>
测试:
sqlSession.delete("test.deleteUser", 5);