注解开发
1、面向接口编程
选择面向接口编程的根本原因是为了解耦,
关于接口的理解:
- 定义与实现的分离
- 接口可以反应设计人员对于系统的抽象理解
2、注解开发
2.1、注解在接口上实现
@Select("select * from user")
List<User> getUsers();
2.2、需要在配置文件中绑定接口
<!--绑定接口-->
<mappers>
<mapper class="com.malajava.dao.UserMapper"/>
</mappers>
2.3、测试
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
//底层主要使用反射
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUsers();
for (User user:userList) {
System.out.println(user);
}
}
本质:反射机制
底层:动态代理!
3、注解的CRUD
在工具类中可以设置为自动提交事务
public static SqlSession getSqlSession(){
SqlSession sqlSession = sqlSessionFactory.openSession(true);//设置为true表示自动提交事务
return sqlSession;
}
- 编写接口
@Select("select * from user")
List<User> getUsers();
@Select("select * from user where id = #{id}")
//方法中存在多个参数的时候,必须加上@Param注解,对于引用对象不需要添加
User getUserById(@Param("id") int id);
@Insert("insert into user(id,name,pwd) values(#{id},#{name},#{password})")
int addUser(User user);
@Update("update user set name=#{name},pwd=#{password} where id=#{id}")
int updateUser(User user);
@Delete("delete from user where id=#{uid}")
int deleteUser(@Param("uid") int id);
- 测试
public class UserMapperTest {
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
//底层主要使用反射
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUsers();
for (User user:userList) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
sqlSession.close();
}
@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(9,"Lisa","121211");
int i = mapper.addUser(user);
if(i>0){
System.out.println("插入成功!!");
}else{
System.out.println("插入失败 ");
}
sqlSession.close();
}
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(5,"peter","12121"));
sqlSession.close();
}
@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(8);
sqlSession.close();
}
}
注意
- 一定不要忘了将接口绑定到核心配置文件中
<!--绑定接口-->
<mappers>
<mapper class="com.malajava.dao.UserMapper"/>
</mappers>
- 关于
@Param()
注解- 基本类型的参数和String类型,都需要加上
- 引用类型不需要加
- 如果只有一个基本类型的话,可以忽略,但是建议大家加上
- 在SQL中引用的就是我们这里的
@Param("name")
中的属性名
来源:oschina
链接:https://my.oschina.net/asia123/blog/4505826