第一步:在Dao中编写接口类
public interface UserMapper {
//查询全部用户
List<User> getUsers();
//根据ID查询用户
User getUserById(int id);
//插入一个用户
int addUser(User user);
//修改用户
int updataUser(User user);
//删除用户
int deleteUser(int id);
}
第二步:在Mapper中绑定接口,并且实现
<?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">
<!--namespace绑定一个对应Dao/Mapper的接口-->
<mapper namespace="com.LinXiaoDe.dao.UserMapper">
<!-- 查询全部用户-->
<select id="getUsers" resultType="com.LinXiaoDe.pojo.User">
select * from mybatis_db.user_t
</select>
<!--根据ID查询用户-->
<select id="getUserById" parameterType="int" resultType="com.LinXiaoDe.pojo.User">
select * from mybatis_db.user_t where id=#{id}
</select>
<!--插入一个用户-->
<insert id="addUser" parameterType="com.LinXiaoDe.pojo.User">
insert into mybatis_db.user_t (id,userName,password) value (#{id},#{userName},#{password})
</insert>
<!--修改用户-->
<update id="updataUser" parameterType="com.LinXiaoDe.pojo.User">
update mybatis_db.user_t set id=#{id},userName=#{userName},password=#{password} where id=#{id}
</update>
<!--删除用户-->
<delete id="deleteUser" parameterType="int">
delete from mybatis_db.user_t where id=#{id}
</delete>
</mapper>
第三步:在JUnity中调用接口,并且提交事务
- 注意一定要进行事务提交,否则不会生效
public class test {
@Test
public void test1(){
SqlSession sqlSession = null;
try{
//第一步,从工具类中获取sqlSession对象
sqlSession=MyBatisUtil.getSqlSession();
//第二步,执行SQL
UserMapper mapper= sqlSession.getMapper(UserMapper.class);
List<User> users= mapper.getUsers();
//第三步遍历
for (User user:users){
System.out.println(user);
}
}catch (Exception e){
e.printStackTrace();
}finally {
//关闭sqlSession
sqlSession.close();
}
}
@Test
public void test2(){
SqlSession sqlSession=MyBatisUtil.getSqlSession();
UserMapper mapper= sqlSession.getMapper(UserMapper.class);
mapper.addUser(new User(4,"EE","E1243"));
sqlSession.commit();//注意一定要进行事务提交,否则不会生效
sqlSession.close();
}
}
万能的Map
在实际项目中,数据库一条数据的属性值可能非常非常的多,但是CRUD操作如果只修改一条信息的某一个属性,如果仍然用上面的方法就会十分繁杂。比如说修改数据,每次要传入一个User对象,这个对象的属性很多,如果全部构造的话将会花费大量精力,这个时候可以考虑使用下面提到的Map方法:
(1)mapper接口
//userMapper.java
public interface UserMapper {
int addUser(User user);
//修改用户
int updataUser(User user);
//map方法修改用户
int updataUserMap(Map<String,Object>map);
}
(2)mapper中
<!--修改用户-->
<update id="updataUser" parameterType="com.LinXiaoDe.pojo.User">
update mybatis_db.user_t set id=#{
id},userName=#{
userName},password=#{
password} where id=#{
id}
</update>
这里#{
}中的属性名可以不和数据库中的一致,只需要用map<key,value>对应即可
<!--修改用户map-->
<insert id="updataUserMap" parameterType="map">
update mybatis_db.user_t set userName=#{
name},password=#{
pwd} where id=#{
userId}
(3)测试
@Test
public void updataUserMap()
{
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String,Object> map=new HashMap<String, Object>();
map.put("userId",5);
map.put("name","map");
map.put("pwd","000000");
mapper.updataUserMap(map);
sqlSession.commit();
}
模糊查询
- 模糊查询根据value值进行查询,在sql语句中用like关键字
- 注意查询的关键字要用
#{%value%}
通配符进行拼接 - 注意写死输入字符串以防止sql注入
(1)mapper接口
//模糊查询
List<User> getUserLike(String value);
(2)mapper.xml
<select id="getUserLike" parameterType="String" resultType="com.LinXiaoDe.pojo.User">
select * from mybatis_db.user_t where userName like #{
value}
</select>
(3)测试
@Test
public void getUserLike(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUserLike("%抑%");
for (User user:users){
System.out.println(user);
}
sqlSession.commit();
sqlSession.close();
}