Mybatis中对数据库的增删改查
由于前文已经介绍过Mybatis的环境搭建了,在这里就不再赘述了。还未搭建的朋友参考-创建第一个Mybatis工程
基本步骤
在接口(UserMapper.class)中新增接口方法 --> 配置映射文件(UserMapper.xml)
增删改查(单参数)
标签的属性
属性id对应接口中的方法名称。
parameterType表示参数的类型,需要使用全限定名。
resultType表示返回值类型,使用全限定名。
新增
UserMapper.class
先在接口中新增方法,参数为User, 返回值为int
//新增
public int addUser(User user);
UserMapper.xml
配置文件中新增的标签为insert ,中间为sql语句。#{xxx} 表示从参数中取值,当参数类型为对象时,则会取对象中的相关属性。
如此语句中的 #{id} ,表示 user.id。
<!-- 新增 需要提交事务 -->
<insert id="addUser" parameterType="com.test.pojo.User">
insert into user(id , name , pw) values(#{id} , #{name} , #{pw})
</insert>
测试代码
由于后面几个的测试代码都差不多,就不再贴测试代码了。
//新增的单元测试
@Test
public void testForAdd() {
//获取SqlSession
SqlSession sqlSession = MybatisUtil.getSqlSession();
//获取接口实例
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//插入操作 并且返回操作是否成功的标识
int result = userMapper.addUser(new User(1008 , "赵六" , "qwer"));
if (result > 0) {
System.out.println("插入成功。");
//需要提交 删除 新增 更新数据都需要
sqlSession.commit();
}
//关闭sqlSession
sqlSession.close();
}
删除
UserMapper.class
//删除某条数据
public int deleteUser(int id);
UserMapper.xml
配置文件中新增的标签为delete
<!-- 更新 需要提交事务 -->
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
更新
UserMapper.class
//更新数据
public int updateUser(User user);
UserMapper.xml
配置文件中新增的标签为update
<!-- 更新 需要提交事务 -->
<update id="updateUser" parameterType="com.test.pojo.User">
update user set name=#{name},pw=#{pw} where id=#{id}
</update>
查询
UserMapper.class
//指定查询
public User getUserById(int id);
UserMapper.xml
配置文件中新增的标签为select
<!-- 带参数的指定查询 -->
<select id="getUserById" parameterType="int" resultType="com.test.pojo.User">
select * from user where id = #{id}
</select>
多参数查询及模糊查询
可以发现我们的parameterType只能是一个参数,那当我们一个查询需要多个参数时呢?
多参数查询
比如我们要查询id为1001, 并且名字为张三的人。我们这个时候的参数类型可以填map 。使用键值对传递多个参数给xml
UserMapper.class
方法参数为Map
//多参数查询
public User getUserParams(Map<String , Object> map);
UserMapper.xml
配置文件中新增的标签为select,参数类型填Map
<!-- 多参数查询 -->
<select id="getUserParams" resultType="com.test.pojo.User" parameterType="map">
select * from user where id = #{id} and name = #{name}
</select>
测试代码
//多参数测试
@Test
public void testForParams() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//构建参数集合的Map 键需要与#{xxx} 一一对应
Map<String , Object> paramsMap = new HashMap<String , Object>();
paramsMap.put("id" , 1001);
paramsMap.put("name" , "张三");
User user = userMapper.getUserParams(paramsMap);
System.out.println(user.toString());
sqlSession.close();
}
模糊查询
方法参数为Map
//按照名字的模糊查询
public List<User> getUserNameLike(Map<String , Object> map);
UserMapper.xml
配置文件中新增的标签为select,参数类型填Map
<!-- 模糊查询 使用concat函数拼接 %xx% ,使用单引号 -->
<select id="getUserNameLike" resultType="com.test.pojo.User" parameterType="map">
select * from user where name like concat('%',#{name},'%')
</select>