一、使用注解开发
1. 注解在接口上实现
| 12
 3
 4
 
 | public interface UserMapper {@Select("select * from user")
 List<User> getUser();
 }
 
 | 
2. 需要在核心配置文件中绑定接口!
| 12
 3
 4
 
 | <mappers>
 <mapper class="com.nichu.dao.UserMapper"/>
 </mappers>
 
 | 
3. 测试
| 12
 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();
 }
 
 | 
注解开发的
| 12
 3
 4
 5
 
 | 本质:反射机制实现底层:动态代理!
 弊端:使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点
 的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱
 不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。
 
 | 
二、Mybatis执行流程

三、 注解的CRUD
1. 在MybatisUtils中开启自动提交
| 12
 3
 
 | public static SqlSession getSqlSession(){return sqlSessionFactory.openSession(true);
 }
 
 | 
2. 编写接口文件
| 12
 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. 编写测试类
| 12
 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 注入。