3.1、select
- 编写接口
方法一:
//根据ID查询用户
User getUserById(int id);
方法二:
User getUserById(@Param("uid") int id);
- 编写对应的mapper中的sql语句
方法一:
<select id="getUserById" resultType="com.chen.pojo.User" parameterType="int">
select * from user where id = #{id};
</select>
方法二:
<select id="getUserById" resultType="com.chen.pojo.User" parameterType="int">
select * from user where id = #{uid};
</select>
- 测试
@Test
public void getUserById(){
SqlSession session = MybatisUtils.getSqlSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
session.close();
}
3.2、insert
- 编写接口
//insert一个用户
int addUser(User user);
- 编写对应的mapper中的sql语句
<!-- 对象中的属性,可以直接取出来 -->
<insert id="addUser" parameterType="com.chen.pojo.User">
insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>
- 测试
//增删改需要提交事务
@Test
public void addUser(){
SqlSession session = MybatisUtils.getSqlSession();
UserMapper mapper = session.getMapper(UserMapper.class);
int res = mapper.addUser(new User(4, "赵六", "2333333"));
if(res>0){
System.out.println("插入成功!");
}
//提交事务
session.commit();//也可以以sqlSessionFactory.openSession(true)
session.close();
}
3.3、update
- 编写接口
//修改用户
int updateUser(User user);
- 编写对应的mapper中的sql语句
<update id="updateUser" parameterType="com.chen.pojo.User">
update user set name = #{name},pwd = #{pwd} where id =#{id};
</update>
- 测试
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(4,"呵呵","555666"));
sqlSession.commit();
sqlSession.close();
}
3.4、Delete
- 编写接口
//删除一个用户
int deleteUser(int id);
- 编写对应的mapper中的sql语句
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id};
</delete>
- 测试
@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(4);
sqlSession.commit();
sqlSession.close();
}
注意点:
- 增删改需要提交事务
3.5、万能Map
假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应该考虑使用Map!
- 编写接口
int addUser2(Map<String,Object> map);
- 编写对应的mapper中的sql语句
<!-- 传递map的key -->
<insert id="addUser2" parameterType="map">
insert into user (id,pwd) values (#{userId},#{password})
</insert>
- 测试
@Test
public void addUser2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<String,Object>();
map.put("userId",5);
map.put("password","999888");
mapper.addUser2(map);
sqlSession.commit();
sqlSession.close();
}
- Map传递参数,直接在sql中取出key即可!
【parameterType=“map”】 - 对象传递参数,直接在sql中取除对象的属性即可!
【parameterType=“Object”】 - 只有一个基本类型参数的情况下,可以直接在sql中取到!
- 多个参数用Map,或者注解!
3.6、模糊查询
1.Java代码执行的时候,传递通配符% %
List<User> users = mapper.getUserLike("%李%");
2.在sql拼接中使用通配符
- 方式一
<select id="getUserLike" resultType="com.chen.pojo.User">
select * from user where name like concat('%',#{value},'%')
</select>
- 方式二(容易引起sql注入)
<select id="getUserLike" resultType="com.chen.pojo.User">
select * from user where name like "%"#{value}"%"
</select>
3.7、字段自增问题
1、新建一个User表,主键id自增
2、我们来编写一个给表插入用户的操作
UserMapper.java 接口
// 插入
public void insertUser(User user);
UserMapper.xml
<insert id="insertUser" parameterType="user">
insert into girls.user (username,password) values (#{username},#{password})
</insert>
测试
@Test
public void insertUser(){
SqlSession session = getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User();
user.setUsername("李四");
user.setPassword("222");
System.out.println(user);
mapper.insertUser(user);
System.out.println(user);
session.commit();
close();
}
注意:由于主键是自增的,所以我们没有给user设定具体的id
前后id都为null,我们再来看看数据库
我们发现数据库是有id值得,那么我们怎么才能获取自增的这个数据呢?
方法一
修改UserMapper.xml
<insert id="insertUser" parameterType="user" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into girls.user (username,password) values (#{username},#{password})
</insert>
测试
方法二
修改UserMapper.xml
<insert id="insertUser" parameterType="user">
insert into girls.user (username,password) values (#{username},#{password})
<selectKey keyColumn="id" keyProperty="id" order="AFTER" resultType="int">
select last_insert_id();
</selectKey>
</insert>
测试
3.8、小结
- 所有的增删改查操作都需要提交事务。
- 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
- 有时候根据业务的需求,可以考虑使用map传递参数!
- 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!