Mybatis使用注解开发

一、使用注解开发

1. 注解在接口上实现

1
2
3
4
public interface UserMapper {
@Select("select * from user")
List<User> getUser();
}

2. 需要在核心配置文件中绑定接口!

1
2
3
4
<!--绑定接口-->
<mappers>
<mapper class="com.nichu.dao.UserMapper"/>
</mappers>

3. 测试

1
2
3
4
5
6
7
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> user = mapper.getUser();
System.out.println(user);
sqlSession.close();
}

注解开发的

1
2
3
4
5
本质:反射机制实现
底层:动态代理!
弊端:使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点
的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱
不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。

二、Mybatis执行流程

三、 注解的CRUD

1. 在MybatisUtils中开启自动提交

1
2
3
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}

2. 编写接口文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public interface UserMapper {
@Select("select * from user")
List<User> getUser();

@Select("select * from user where id = #{id}")
User getUserByID(@Param("id") int id);

@Insert("insert into user(id,name,pwd) values(#{id},#{name},#{password})")
int insertUser(User user);

@Delete("delete from user where id = #{id}")
int delUserByID(@Param("id") int id);

@Update("update user set name=#{name},pwd=#{password} where id = #{id}")
int updateUser(User user);
}

3. 编写测试类

1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserByID(2);
System.out.println(user);
mapper.insertUser(new User(6,"hello","1231234"));
mapper.delUserByID(6);
mapper.updateUser(new User(10,"hello","22223"));
sqlSession.close();
}

关于@Param()

  • 基于类型的参数或者String类型,需要加上。
  • 引用类型不需要加。
  • 如果只有一个基本类型的话,可以忽略,但是建议加上。
  • 在SQL中引用的就是@Param()中设置的属性。

#{} 和 ${}区别

#{} 是预编译处理,像传进来的数据会加个" "(#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号)
${} 就是字符串替换。直接替换掉占位符。$方式一般用于传入数据库对象,例如传入表名.
使用 ${} 的话会导致 sql 注入。

-------------本文结束感谢您的阅读-------------