三种方式注入值
AOP设计原理
面向切面编程,实现机制,使用AOP配置
动态代理技术 实现某一接口 CGLIB 工具完成了动态代理技术
Proxy
子类替代父类
Spring事务控制 底层封装AOP 声明组件
事务控制技术 使用
保证完整性
事务提交
readOnly rollback propagation isolation
Mybatis 学习 Githhub 封装了JDBC,简化数据访问
持久化框架 数据可以长时间保留
文件保留持久性 数据库的持久性
程序中的数据保存到数据库
环境包,基本定义 Mapper接口映射到接口中
与数据库一一对应
update user set id=#{0},name=#{1}, jdbcType=Varchar
将参数映射到SQL语句 jdbcType=Varchar 可以为空
Mapper接口可以有多个参数
update user set id={param1}”,name={param2}
接口定义@Param(“id”) int id
主配置文件设置连接参数
配置自带日志打印sqlmap-config.xml
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
SQL注入 字符串拼接 修改其中参数
参数映射集合 $ 提前嵌入SQL值 非预编译
#{} 采用SQL预编译机制执行 PreparedStatement
${} 非编译 模式
#{} 可以预防注入式攻击 使用安全
${} 一般给SQL传入数据库对象 使用 列如表名 、字段名
需要使用中设置添加‘’
<select id="findAll" resultType="com.tracy.eneity.User">
select * from user order by ${'name'}
</select>
${_parameter}
<update id="update" parameterType="com.tracy.eneity.User" >
update user set name=#{param2},pwd=#{param3} where id=${param1}
</update>
类型别名定义 简化类型定义使用 ParameterType ResultType 都可以使用简化配置
自定义别名 追加
<typeAliases>
<typeAlias type="com.tracy.eneity.User" alias="user"/>
</typeAliases>
分页处理 Mybatis提供了分页的封装,
数据分页查询语句
select * from
(
select t1.* ,rownum rn from
(select id ,login_name from user order by id) t1
)
wher rn>0 and rn<=6;
UserMapper.xml语句
<select id="findPage" resultType="user">
select * from user
</select>
测试类
@Test
public void findPage() throws IOException {
SqlSession session=MybatisUtil.getSession();
//从第0个取 取2个
RowBounds bounds=new RowBounds(0, 2);
List<User> list=session.selectList("findPage",null, bounds);
for(User user:list) {
System.out.println(user.getName()+"|||| "+user.getHead_img());
}
session.close();
}
从0 开始抓抓5个
原始的分页查询,数据查询效率低,查询时会将前面数据全部取出
引入插件 PageHelper类
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper"></plugin>
</plugins>
mapper接口直接映射为 sql语句
执行查询之前 设置Page page=PaHelper.startPage(1,3);//只对后面第一个查询语句有效
@Test
public void findPage() throws IOException {
SqlSession session=MybatisUtil.getSession();
UserMapper userDao=session.getMapper(UserMapper.class);
//取2页 每页2个
Page page=PageHelper.startPage(2, 2);
List<User> list=userDao.findPage();
for(User user:list) {
System.out.println(user.getName());
}
System.out.println("总页"+page.getTotal()+"页数"+page.getPageNum());
session.close();
}