【Mybatis系列】Mybatis增删改查
增:Insert
添加数据记录,id有两种不同的方式
方式一:id自增长
如果使用自增长我们的数据库表的设计要保证id默认为自增长
INSERT INTO user values(#{id},#{name},#{pwd})
@Test
public void InsertUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
mapper.addUser(new User("哈哈","1233"));
//提交事务
sqlSession.commit();
sqlSession.close();
}
在增的过程中我们需要提交事务,sqlSession.commit(),如果不提交事务,那么是无法插入的
- 方式二:Java代码传进来ID,这个ID可以是一个UUID,也可以是自定义的
使用UUID我们一般使用Mysql自带的UUID函数
整体思路: 先调用MySql的UUID函数,获取到一个UUID,将这个UUID赋值给对象的ID属性,然后再去执行sql语句
<insert id=addUser parameterType="User">
<selectkey resultType="java.lang.string" keyProperty="id" order="BEFORE">
select uuid();
</selectkey>
insert into user(id,username,address) values (#{id},#{name},#{pwd})
</insert>
- selectKey:表示查询key
- keyProperty:表示将查询的结果赋值给传递进来的User对象的id属性
- order:表示执行的时机,Before表示这个查询操作要在insert之前执行
Java代码:
@Test
public void InsertUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
mapper.addUser(new User("哈哈","1233"));
//提交事务
sqlSession.commit();
sqlSession.close();
}
删:
需求: 通过id删除一个用户信息
//根据id删除用户
int deleteUser(int id);
<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();
}
改:Update 和删除的使用方法类似
查:Select
需求:根据id查询用户信息
1、在UserMapper中添加对应方法
public interface UserMapper {
//查询全部用户
List<User> selectUser();
//根据id查询用户
User selectUserById(int id);
}
2、在UserMapper.xml中添加Select语句
<select id="selectUserById" resultType="com.kuang.pojo.User">
select * from user where id = #{id}
</select>
3.在测试类中进行测试:
@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();
}
当参数过多的时候使用Map
例如:根据密码和用户名来查询用户信息
1.在接口方法中直接传递Map
User selectUserByNP2(Map<String,Object> map);
2.编写sql语句的时候,需要传递参数类型,参数类型为map
<select id="selectUserByNP2" parameterType="map"resultType="com.kuang.pojo.User">
select * from user where name = #{username} and pwd = #{pwd}
</select>
3.Java中的代码
Map<String, Object> map = new HashMap<String, Object>();
map.put("username","小明");
map.put("pwd","123456");
User user = mapper.selectUserByNP2(map);
总结: 所有的增删改操作都需要提交事务
接口的所有普通参数,尽量都加上@Param参数
有时候根据业务的需求,可以考虑使用map传递参数
扩展:
我们的resultType引用的是一个实体类型,这样写比较长,我们如何给实体起一个别名?
方式一:
<typeAliases>
<typeAlias type="com.kuang.pojo.User" alias="User"/>
</typeAliases>
方式二:
@Alias("user")
public class User {
...
}
这样配置之后我们可以在任何地方将 com.kuang.pojo.User 替换为 User
还没有评论,来说两句吧...