mybatis动态sql

mybatis的一些小细节

痞子三分冷 提交于 2019-12-01 23:56:49
Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译。系统可维护性不高。 设想如何解决? 能否将sql单独配置在配置文件中。 2. 数据库连接频繁开启和释放,对数据库的资源是一种浪费。 设想如何解决? 使用数据库连接池管理数据库连接。 3. 向preparedStatement中占位符的位置设置参数时,存在硬编码(占位符的位置,设置的变量值) 设想如何解决? 能否也通过配置的方式,配置设置的参数,自动进行设置参数 4. 解析结果集时存在硬编码(表的字段名、字段的类型) 设想如何解决? 能否将查询结果集映射成java对象。 image 问题一. #{}和${}的区别是什么? #{}是预编译处理,${}是字符串替换。 Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值; Mybatis在处理 {}替换成变量的值。 使用#{}可以有效的防止SQL注入,提高系统安全性。 问题二. 当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 第1种: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致 <select id=”selectorder” parametertype=”int” resultetype=”me.gacl

MyBatis注解

时光怂恿深爱的人放手 提交于 2019-12-01 18:42:42
mybatis是一个非常好的持久层框架,有字段映射,有sql缓存,还能很好的和spring做集成,用的人真是非常非常多,尤其是互联网公司,基本上不用hibernate的都在用mybatis。 mybatis的优点主要体现在以下几个方面: java实体和数据库字段做映射,简化jdbc操作,不用写各种各样的set、get字段操作; 可以利用第三方的工具,根据model对象,自动生成xml、mapper配置文件,基本不用写sql; sql集中存储,上线后如果sql有问题,可以直接改配置,不用编译java,重启就能运行; mybatis的缓存,这个意义也不是很大,如果真到了靠这点缓存来提高性能的地步了,估计就不单单是mybatis的原因了。 缺点也有不少,简单列几点: mybatis里面的特殊字符,比如<>等,很容易造成错误,且mybatis的错误提示不是很具体; mybatis更新比较缓慢,其实这几年都没什么更新,而且也没什么要更新的了。确实是这样,mybatis后来新加的基于注解的操作,替代xml,意义不是很大,基本很少人用,mybatis的核心在于mapper映射文件,改为注解后,映射文件不存在了; 调试比较麻烦,主要是因为如果改mapper配置文件,工程需要重启,不知道现在的jrebel能不能动态加载mapper文件。 1. mybatis支持的映射方式

mybatis动态sql和分页

风格不统一 提交于 2019-12-01 17:22:56
mybatis 动态 sql foreach BookMapper.xml <select id="selectBooksIn" resultType="com.lingerqi.model.Book" parameterType="java.util.List"> select * from t_mvc_book where bid in <foreach collection="bookIds" item="bid" open="(" close=")" separator=","> #{bid} </foreach> </select>    List<Book> selectBooksIn(@Param("bookIds") List bookIds);    模糊查询 #{...} ${...} Concat 注意: #{...} 自带引号, ${...} 有 sql 注入的风险 Book.Mapper.xml: <select id="selectBooksLike1" resultType="com.javaxl.model.Book" parameterType="java.lang.String"> select * from t_mvc_book where bname like #{bname} </select> <select id=

Mybatis的动态sql以及分页

风流意气都作罢 提交于 2019-12-01 17:04:57
mybatis 动态 sql If、trim、foreach <select id="selectBooksIn" resultType="com.jt.model.Book" parameterType="java.util.List"> select * from t_mvc_book where bid in <foreach collection="bookIds" open="(" close=")" separator="," item="bid"> #{bid} </foreach> </select> List<Book> selectBooksIn(@Param("bookIds") List bookIds); 再来看下工具类 Pagebean.java private static final long serialVersionUID = 2422581023658455731L; //页码 private int page=1; //每页显示记录数 private int rows=10; //总记录数 private int total=0; //是否分页 private boolean isPagination=true; //上一次的请求路径 private String url; //获取所有的请求参数 private Map<String

Mybatis最权威的知识点

ぐ巨炮叔叔 提交于 2019-12-01 13:28:54
1、什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。 (2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 (3)通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。 2、Mybaits的优点: (1)基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。 (2)与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接; (3)很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。 (4

Mybatis下

南楼画角 提交于 2019-12-01 10:23:24
目录 动态SQL 动态SQL语句的标签: 标签 标签 标签 标签 标签 对象的关联映射 对象之间的关联关系有: 通过映射文件,实现对象和对象的关系 子查询:配置用户找到评论 连接查询: 对比子查询和内连接: 延迟加载 缓存 作用: MyBatis自带的缓存: 一级缓存 二级缓存 动态SQL 多条件查询常规实现: String sql = "select * from tb_user where 1=1"; if(填写用户){ sql += " and username = xxx"; } .... 拼接比较复杂,容易出错 把业务逻辑耦合到数据库操作(DAO)中 动态SQL是MyBatis的重要特性,能够在映射文件的SQL语句中,加入逻辑判断,自动拼接SQL,从而实现复杂功能 动态SQL语句的标签: 基本的条件判断 配置查询条件 配置update语句 自定义条件配置 循环标签 标签 语法: SQL语句 SQL语句 当条件成立,if中的SQL语句会和外面SQL语句拼接到一起 <select id="selecUser" parameterType="User" > select * from tb_user where <if test="username != null"> username = #{username} </if> <if test="realname != null

MyBatis动态SQL

╄→尐↘猪︶ㄣ 提交于 2019-12-01 09:53:53
动态SQL的作用 MyBatis的动态SQL主要就是为了解决手动拼接SQL的麻烦 动态SQL中的元素 动态SQL是MyBatis的强大特性之一,MyBatis3采用了功能强大的基于OGNL的表达式来完成动态SQL。动态SQL主要元素如下表所示: 1.<if> 元素 在MyBatis中,<if>元素是最常用的判断语句,它类似于Java中的if语句,主要用于实现某些简单的条件选择。其基本使用示例如下: <select id="findCustomerByNameAndJobs" parameterType="com.ma.po.Customer" resultType="com.ma.po.Customer"> select * from t_customer where 1=1 <if test="username != null and username != ''"> and username like '%${username}%' </if> <if test="jobs != null and jobs !=''"> and jobs = #{jobs} </if> </select> 2.<choose>、<when>、<otherwise>元素 如果是java语言,这种情况就相当于switch...case...default语句。 select * from t

MyBatis缓存

余生长醉 提交于 2019-12-01 09:53:11
一. 什么是查询缓存 Mybatis 的一级缓存 是指 SqlSession 。一级缓存的作用域是一个SqlSession 。 Mybatis 默认开启一级缓存 。 在同一个SqlSession 中,执行相同的查询SQL ,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL 时两次查询中间发生了增删改操作,则SqlSession 的缓存清空。 Mybatis 的二级缓存 是指 mapper 映射文件 。二级缓存的作用域是同一个namespace 下的mapper 映射文件内容,多个SqlSession 共享。 Mybatis 需要手动设置启动二级缓存 。 在同一个namespace 下的mapper 文件中,执行相同的查询SQL ,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL 时两次查询中间发生了增删改操作,则二级缓存清空。 二.一级缓存 一级缓存 MyBatis的一级缓存指的是在一个Session域内,session为关闭的时候执行的查询会根据SQL为key被缓存(跟mysql缓存一样,修改任何参数的值都会导致缓存失效) 1)单独使用MyBatis而不继承Spring,使用原生的MyBatis的SqlSessionFactory来构造sqlSession查询,是可以使用以及缓存的,示例代码如下 public class Test {

Mybatis----Mybatis使用

China☆狼群 提交于 2019-12-01 09:06:32
对映射文件(mapper.xml说明) <mapper namespace="com.zy.Dao.UserDao"> //namespace:命名空间 <select id="selectById" resultType="User" parameterType="int"> //id:表示映射文件的sql,将sql语句封装到mappedStatement对象中,所以又叫statement的id,parmeterType(可以不指定):输入类型的参数,如果指定类型是简单类型(int,String等),参数名可以任意 SELECT * FROM t_user WHERE id = #{id} ; </select> </mapper> MyBatis 使用 增删改查 增 <insert id="insert"> INSERT INTO tb_user ( id, username, password, phone, email, created, updated ) VALUES ( #{id}, #{username}, #{password}, #{phone}, #{email}, #{created}, #{update} ) </insert>    mysql自增主键:返回主键(主键被设置到了传入参数的user上) <insert id="insetone">

阿里最新38道Java面试题解析(MyBatis+消息队列+Redis)

∥☆過路亽.° 提交于 2019-12-01 08:48:55
一、谈谈你对 MyBatis 的理解? 1. Mybatis是一个半ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 Statement 等繁杂的过程。程序员直接编写原生态 SQL,可以严格控制 SQL 执行性能,灵活度高。 2. MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。3. 通过 XML 文件或注解的方式将要执行的各种 Statement 配置起来,并通过 Java 对象和 Statement 中 SQL 的动态参数进行映射生成最终执行的 SQL 语句,最后由 MyBatis 框架执行 SQL并将结果映射为 Java 对象并返回。(从执行 SQL到返回 Result 的过程)。 二、MyBaits 的优缺点有哪些? § 优点: 1. 基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL 写在 XML 里,解除 SQL 与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态 SQL 语句,并可重用; 2. 与 JDBC 相比,减少了代码量,消除了 JDBC 大量冗余的代码,不需要手动开关连接; 3. 很好的与各种数据库兼容(因为