Mybatis详细的执行流程
对工具类增删改操作完善(commit)
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
// 静态代码块
static {
// 使用mybatis第一步 获取sqlSessionFactory
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
// 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
/**
* sqlSession完全包含了面向数据库执行sql,命令所需的所有方法.
*/
public static SqlSession getSqlSession(){
// 加上true后增删改不再需要手动commit提交
return sqlSessionFactory.openSession(true);
}
}
编写接口,添加增删改查注解
/**
* 方法存在多个参数,所有的参数前面必须加上 @Param("")注解 以注解里面的参数优先
* @param id
* @param name
* @return
*/
@Select("select * from user where id = #{id}")
User getUserById(@Param("id") int id,@Param("username") String username);
/**
* 添加用户
* @param user
* @return
*/
@Insert("insert into user(id,name,pwd) values (#{id},#{username},#{password})")
int addUser(User user);
/**
* 修改用户
* @param user
* @return
*/
@Update("update user set name=#{username},pwd=#{password} where id=#{id}")
int updateUser(User user);
/**
* 删除用户
* @param id
* @return
*/
@Delete("delete from user where id=#{id}")
int deleteUser(@Param("id") int id);
测试
注意点
必须要将接口注册到核心配置文件中
@Test
public void addUserTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int count = mapper.addUser(new User(5, "aa", "121"));
if (count > 0){
System.out.println("添加成功");
}
sqlSession.close();
}
@Test
public void updateUserTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int updateUser = mapper.updateUser(new User(1, "ff", "111"));
if (updateUser > 1){
System.out.println("修改成功");
}
sqlSession.close();
}
@Test
public void removeUserTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.deleteUser(1);
if (i > 0){
System.out.println("删除成功");
}
sqlSession.close();
}
关于@Param()注解
- 基本类型的参数或者String类型,需要加上
- 引用类型不需要加
- 如果只有一个基本类型的话,可以忽略,但是建议添加
- 在sql中引用的就是
@Param()中的属性名