接着上一篇说,上篇写了怎么把它跑起来,并且只写了一个查询所有的语句。
这篇写增删改查、注解实现增删改查、映射器 (mappers)
上篇链接:mybatis入门之跑起来
实现增删改查
默认是跑起来了mybatis。那实现增删改查,就只需要在UserMapper
中添加接口,在UserMapper.xml
中写标签和sql语句,然后在测试类中添加测试方法进行测试。
你也可以练习一下,先把接口写上,
UserMapper.xml
中的内容先自己写。
1、UserMapper类:
public interface UserMapper {
// 查询所有用户
List<User> findAll();
//根据id查询用户
User getUserById(int id);
//插入用户
int addUser(User user);
//更新用户
int updateUser(User user);
//删除用户
int deleteUser(int id);
}
2、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="com.lu.mapper.UserMapper">
<!--查询所有用户,resulType后要写全,只有命名别名之后才可不写全-->
<select id="findAll" resultType="com.lu.pojo.User">
select * from user
</select>
<select id="getUserById" parameterType="int" resultType="com.lu.pojo.User">
select * from user where id = #{id}
</select>
<insert id="addUser" parameterType="com.lu.pojo.User" >
insert into user (id,username, pwd) values(#{id},#{username}, #{pwd})
</insert>
<update id="updateUser" parameterType="com.lu.pojo.User">
update user set username = #{username}, pwd=#{pwd} where id=#{id}
</update>
<insert id="deleteUser" parameterType="int">
delete from user where id = #{id}
</insert>
</mapper>
3、编写测试方法
在测试类中,因为导入了juint的依赖,就可以用@Test注解了。
@Test注解下边的方法可以点击左边的绿色那个,就可以单独运行此方法。
@Test
public void getUserByIdTest(){
//创建sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//使用SqlSession创建UserMapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//根据id查询,输入数字
User getuser = userMapper.getUserById(2);
System.out.println(getuser);
//关闭sqlSession
sqlSession.close();
}
使用注解实现增删改查
使用注解的话,会更加简介。
把要写在UserMapper.xml
中的sql语句直接通过注解写到UserMapper
接口中,就可以直接删掉对应的xml了。
还有要改的地方就是在核心配置文件中, 添加SQL 映射语句。
UserMapper接口中添加注解后代码
public interface UserMapper {
// 查询所有用户
@Select("select * from user")
List<User> findAll();
//根据id查询用户
@Select("select * from user where id = #{id}")
User getUserById(int id);
//插入用户
@Insert("insert into user (id, username, pwd ) values(#{id}, #{username}, #{pwd} )")
int addUser(User user);
//更新用户
@Update("update user set username=#{username}, pwd=#{pwd} where id = #{id}")
int updateUser(User user);
//删除用户
@Delete("delete from user where id = #{id}")
int deleteUser(int id);
}
核心配置文件中添加映射
代码:
<mappers>
<mapper class="com.lu.mapper.UserMapper"/>
</mappers>
添加位置如下图
XML 映射器
MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。
SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):
cache
– 该命名空间的缓存配置。
cache-ref
– 引用其它命名空间的缓存配置。
resultMap
– 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
sql
– 可被其它语句引用的可重用语句块。
insert
– 映射插入语句。
update
– 映射更新语句。
delete
– 映射删除语句。
select
– 映射查询语句。
Select 元素的属性
属性 | 描述 |
---|---|
id |
在命名空间中唯一的标识符,可以被用来引用这条语句。 |
parameterType |
将会传入这条语句的参数的类全限定名或别名 |
resultType |
期望从这条语句中返回结果的类全限定名或别名。 注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能同时使用一个。 |
resultMap |
对外部 resultMap 的命名引用。结果映射是 MyBatis 最强大的特性,如果你对其理解透彻,许多复杂的映射问题都能迎刃而解。 resultType 和 resultMap 之间只能同时使用一个。 |
谈谈 映射器(mappers)
以下来自官方文档:
定义 SQL 映射语句。 首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。例如:
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
这些配置会告诉 MyBatis 去哪里找映射文件,剩下的细节就应该是每个 SQL 映射文件了。
官方文档有四种,这里给出两种常用的。