Mybatis学习笔记-注解开发
2024-09-03 23:10:07
面向接口编程
- 根本原因:【解耦】,【可拓展】,【更高规范性】
- 接口类型:
- abstract class
- interface
使用注解开发
- 简单语句可用注解开发(直接查询,列名与属性名相同)
本质:反射机制实现
底层:动态代理
- 注解直接在接口上实现
@Select("SELECT * FROM user")
List<User> getUsers();
- 也与要配置核心配置文件
<!--绑定接口-->
<mappers>
<mapper class="cn.iris.dao.UserMapper"/>
</mappers>
- 测试
@Test
public void getUsersTest() {
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();
}
- 复杂情况均用xml文件配置
注解实现CRUD
在工具类创建时实现自动提交事务
// 有了 SqlSessionFactory,我们可以从中获得 SqlSession 的实例
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession(true);
}
// 涉及源码
public SqlSession openSession(boolean autoCommit) {
return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, autoCommit);
}
查询
@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 addUser(User user);
修改
@Update("UPDATE user SET name = #{name} WHERE id = #{id}")
int updateUser(@Param("id") int id, @Param("name") String name);
删除
@Delete("DELETE FROM user WHERE id = #{id}")
int deleteUserById(@Param("id") int id);
方法存在多参数时,每个参数前都需要加@Param("列名")
@param()注解
- 基本类型参数&String类型,需要加
- 引用类型(如:User)不用加
- 只有单参,可忽略但不建议
- SQL中引用的则是该@param设定的属性名
#{} 与 ${}区别
--#{}:预编译符--没有sql注入风险
--${}:常规编译(字符串拼接)--存在sql注入风险
最新文章
- 由js apply与call方法想到的js数据类型(原始类型和引用类型)
- 最小安装模式下Centos7.*网卡启动配置
- canvas中的碰撞检测笔记
- CentOS 6.x 系统安装选项说明
- yum mysql on centos 7
- NYOJ 128 前缀式计算
- (四)ubuntu学习前传—uboot中对Flash和DDR的管理
- show engine innodb status\G
- python中的对象拷贝
- 简单的背包问题(入门)HDU2602 HDU2546 HDU1864
- WPS2012交叉引用提示word比wps这种强烈的更新参考
- Node填坑教程——HelloWorld
- git使用详解
- CentOS_7下安装MySQL
- 安装SSD
- 深度学习中的batch_size,iterations,epochs等概念的理解
- mysql常用函数总结
- PHP内置函数实现简单洗牌
- [html]webpack网页开发打包工具
- dubbo监控工具