MyBatis——CRUD
1.namespace
namespace用来配置映射到哪个接口,而对应接口的xml文件可以看出这个接口的实现类。
需要注意的是,配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致!
配置xml文件的过程就是写接口实现类的过程。也是一个写DRUD的过程。
2.select
- id
- 命名空间中唯一的标识符,用来标识接口中的哪个方法。
- 接口中的方法名与映射文件中的SQL语句ID 一一对应
- parameterType
- 传入SQL语句的参数类型 。【万能的Map,可以多尝试使用】
- resultType
- SQL语句返回值类型。【完整的类名或者别名】
-
在UserMapper中添加对应方法
public interface UserMapper { //查询全部用户 List<User> selectUser(); //根据id查询用户 User selectUserById(int id); }
-
在UserMapper.xml中添加Select语句,注意取接口参数的时候用#{}。且保持一致。
<select id="selectUserById" resultType="com.kuang.pojo.User"> select * from user where id = #{id} </select>
-
测试类中测试
@Test public void tsetSelectUserById() { SqlSession session = MybatisUtils.getSession(); //获取SqlSession连接 UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUserById(1); System.out.println(user); session.close(); }
3.insert
我们一般使用insert标签进行插入操作,它的配置和select标签差不多!
需求:给数据库增加一个用户
-
在UserMapper接口中添加对应的方法
//添加一个用户 int addUser(User user);
-
在UserMapper.xml中添加insert语句,可以直接取出pojo实体类中的属性
<insert id="addUser" parameterType="com.yang.pojo.User"> insert into user (id,name,pwd) values (#{id},#{name},#{pwd}) </insert>
-
测试,注意增删改一定要提交事务!
session.commit();
@Test public void addUser() { SqlSession session=MyBatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user=new User("杨嘻嘻",4,"123456"); int i = mapper.addUser(user); System.out.println(i); session.commit(); session.close(); }
4.update
-
同理,编写接口方法
//修改一个用户 int updateUser(User user);
-
编写对应的配置文件SQL
<update id="updateUser" parameterType="com.yang.pojo.User"> update user set name=#{name},pwd=#{pwd} where id = #{id} </update>
-
测试
@Test public void updateUser() { SqlSession session=MyBatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); mapper.updateUser(new User("杨呵呵",4,"123456")); session.commit();//注意提交事务 session.close(); }
5.delete
-
同理,编写接口方法
//根据id删除用户 int deleteUser(int id);
-
编写对应的配置文件SQL
<delete id="deleteUser" parameterType="int"> delete from user where id = #{id} </delete>
-
测试
@Test public void testDeleteUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); int i = mapper.deleteUser(5); System.out.println(i); session.commit(); //提交事务,重点!不写的话不会提交到数据库 session.close(); }
6.万能Map
当所查询或者修改的实体类字段较多时,一次性传入整个对象会很麻烦,灵活性不高,粒度太大。我们可以通过一个map传参,其key对应mapper.xml里的参数值。
写接口
//map传参实现插入
int addUser2(Map<String,Object> map);
//map传参实现查询
User getUserById2(Map<String,Object> map);
配置xml
<!--使用map传参,传递的是map的key,一定要对应你map中的key-->
<insert id="addUser2" parameterType="map" >
insert into user(id,name,pwd) values(#{userId},#{userName},#{passWord})
</insert>
<!--map传参查询实现-->
<select id="getUserById2" resultType="com.yang.pojo.User" parameterType="map">
select * from user where id=#{userId} and name =#{userName}
</select>
用多少就传多少。
@Test
public void addUser2()
{
SqlSession session=MyBatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
HashMap<String,Object> map=new HashMap<String, Object>();
map.put("userId",5);
map.put("userName","哈哈哈哈哈");
map.put("passWord","1234");
mapper.addUser2(map);
session.commit();
session.close();
}
@Test
public void getUserById2()
{
SqlSession session=MyBatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
HashMap<String,Object> map=new HashMap<String, Object>();
map.put("userId",5);
map.put("userName","哈哈哈哈哈");
User user = mapper.getUserById2(map);
System.out.println(user);
session.close();
}
7.模糊查询
java代码执行的时候,传递通配符。
//模糊查询
List<User> getUserLike(String value);
<!--模糊查询实现-->
<select id="getUserLike" resultType="com.yang.pojo.User">
select * from user where name like #{value }
</select>
不要写成
<!--模糊查询实现-->
<select id="getUserLike" resultType="com.yang.pojo.User">
select * from user where name like “%”#{value }“%”
</select>
防止sql注入
@Test
public void getUserLike() {
SqlSession session = MyBatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.getUserLike("%李%");
for (User user : users) {
System.out.println(user);
}
session.close();
}