增删改查CRUD
一、 Mybatis实现CRUD的步骤
- 修改实现类接口
- 修改实现类的xml配置文件
- 修改Test文件进行测试
二、具体的CRUD例子
- select:找出id=1的用户 实现类接口:
User getUserById(int id);
实现类的xml配置文件
<select id="getUserById" resultType="com.wu.pojo.User" parameterType="int">
select *
from mybatis.user
where id = #{id};
</select>
Test文件
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
sqlSession.close();
}
- insert 增加一个用户 实现类接口
int insertUser(User user);
实现类的xml配置文件
<insert id="insertUser" parameterType="com.wu.pojo.User">
insert into mybatis.user (id, name, pwd)
values (#{id}, #{name}, #{pwd});
</insert>
Test文件
@Test
public void insertUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(4,"小花","987654");
mapper.insertUser(user);
sqlSession.commit();
sqlSession.close();
}
- delete 删除id=4的用户 实现类接口
int deleteUser(int id);
实现类的xml配置文件
<delete id="deleteUser" parameterType="int">
delete
from mybatis.user
where id = #{id};
</delete>
Test文件
@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(4);
sqlSession.commit();
sqlSession.close();
}
- update 将id=2的用户名字改为小龙 实现类接口
int updateUser(User user);
实现类的xml配置文件
<update id="updateUser" parameterType="com.wu.pojo.User">
update mybatis.user
set name = #{name},
pwd = #{pwd}
where id = #{id};
</update>
Test文件
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(2,"小龙","123321"));
sqlSession.commit();
sqlSession.close();
}
三、Map的使用
- 为什么要使用Map? ---> 因为如果在数据库中的表,字段或者参数过多的情况下,我们在实现类的xml配置文件中所书写的sql语句就会过于的冗长,用Map可以很好解决这个问题。
- 为了更好的对比学习,我这里用Map重写了updateUser2方法,数据库实现将id=2的用户名字改为小蓝
- 实现类接口
int updateUser2(Map<String,Object>map);
- 实现类的xml配置文件
<update id="updateUser2" parameterType="map"> update mybatis.user set name=#{name} where id = #{id} </update>
- Test文件
@Test public void updateUser2(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Map map = new HashMap(); map.put("id",2); map.put("name","小蓝"); mapper.updateUser2(map); sqlSession.commit(); sqlSession.close(); }
- Map比较的万能,特别是针对于实体类和数据库属性特别多的情况。
四、模糊查询
怎么查找数据库中,名字带有“小”的人的全部信息?
- 实现类接口
List<User> selectUser2(String value);
- 实现类的xml配置文件
<select id="selectUser2" parameterType="String" resultType="com.wu.pojo.User" >
select * from mybatis.user where name like #{value}
</select>
- Test文件
@Test
public void selectUser2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.selectUser2("%小%");
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
注意事项:
两种方法:
- 在Java代码执行的时候,传递通配符% % --->常用,比较安全
List<User> users = mapper.selectUser2("%小%");
- 在sql拼接中使用通配符 ---> 会发生SQL注入,数据库的信息不安全,容易泄露
select * from mybatis.user where name like "#"#{value}"#"
五、注意事项
Map传递参数,直接在sql中取出key即可! 【parameter=“map”】
对象传递参数,直接在sql中取出对象的属性即可! 【parameter=“Object”】
只有一个基本类型参数的情况下,可以直接在sql中取到,可以不写parameter属性
多个参数用Map , 或者注解!