MyBatis入门——使用注解开发
Tips:请先阅读:
一、MyBatis入门——第一个MyBatis项目搭建文章
https://blog.csdn.net/Gauss7/article/details/115264612
二、MyBatis入门——基本CRUD代码编写
https://blog.csdn.net/Gauss7/article/details/115280533
三、MyBatis入门——配置解析
https://blog.csdn.net/Gauss7/article/details/115309923
四、MyBatis入门——解决属性名和字段名不一致的问题
https://blog.csdn.net/Gauss7/article/details/115325116
五、MyBatis入门——日志
https://blog.csdn.net/Gauss7/article/details/115351129
六、MyBatis入门——分页
https://blog.csdn.net/Gauss7/article/details/115408607
一、面向接口编程
我们在一般实现一个系统的时候,通常是将定义与实现合为一体,不加分离的,我认为最为理想的系统设计规范应是所有的定义与实现分离,尽管这可能对系统中的某些情况有点麻烦。
二、使用注解开发
-
注解在接口"UserMapper"上实现
@Select("select * from user") List<User> getUsers();
-
需要在核心配置文件"mybatis-config.xml"中绑定接口!
<mappers> <mapper class="com.twy.dao.UserMapper"/> </mappers>
-
测试
@Test public void test(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> users = mapper.getUsers(); for (User user : users) { System.out.println(user); } sqlSession.close(); }
-
本质:反射机制实现
-
底层:动态代理!
三、MyBatis详细的执行流程
四、注解实现CRUD
Tips: 我们可以在工具类创建的时候实现自动提交事务!
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
注意:
我们必须要将接口注册绑定到核心配置文件中!
4.1 查询
① 查询全部信息
第一步:编写接口,增加注解
//查询全部信息
@Select("select * from user")
List<User> getUsers();
第二步:测试
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUsers();
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
② 根据id查询信息
第一步:编写接口,增加注解
//方法存在多个参数,所有的参数前面必须加上@Param("id")注解
@Select("select * from user where id = #{id}")
User getUserByID(@Param("id") int id);
第二步:测试
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User userByID = mapper.getUserByID(1);
System.out.println(userByID);
sqlSession.close();
}
4.2 增加
第一步:编写接口,增加注解
@Insert("insert into user(id,name,age,sex,addr) values (#{id},#{name},#{age},#{sex},#{address})")
int addUser(User user);
第二步:测试
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.addUser(new User(4,"tt",20,"M","广州"));
//若设置自动提交事务,则可以不用sqlSession.commit();
sqlSession.commit();
sqlSession.close();
}
4.3 修改
第一步:编写接口,增加注解
@Update("update user set name=#{name},age=#{age},sex=#{sex},addr=#{address} where id=#{id}")
int updateUser(User user);
第二步:测试
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(4,"twy",20,"M","珠海"));
//若设置自动提交事务,则可以不用sqlSession.commit();
sqlSession.commit();
sqlSession.close();
}
4.4 删除
第一步:编写接口,增加注解
//可用注解将id设为uid
@Delete("delete from user where id=#{uid}")
int deleteUser(@Param("uid") int id);
第二步:测试
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(4);
//若设置自动提交事务,则可以不用sqlSession.commit();
sqlSession.commit();
sqlSession.close();
}
五、@Param()注解
关于@Param()注解:
- 基本类型的参数或者String类型,需要加上。
- 引用类型不需要加。
- 如果只有一个基本类型的话,可以忽略,但是建议都加上!
- 我们在SQL中引用的就是我们这里的@Param()中设定的属性名!