mybatis的使用
来源:互联网 发布:知乎 玄幻小说推荐 编辑:程序博客网 时间:2024/06/06 03:23
一、概念
mybatis是支持普通SQL查询、存储过程和高级映射的优秀持久层框架。mybatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索,mybatis使用简单的XML或注解用于配置和原始的映射,将接口和Java的POJOs映射成数据库中的记录。
二、从XML创建SqlSessionFactory实例
1、 每个mybatis应用程序主要是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得,SqlSessionFactoryBuilder可以从一个XML配置文件或一个预定义的配置类的实例获得。
2、(1)可使用类资源路径来加载配置文件,也可使用包括文本文件路径或者以file:// 开头URL 的方式。MyBatis 包括一个叫做Resources 的工具类,其中包含了一系列方法,使之能简单地从classpath 或其它地方加载配置文件。
String resource = "org/mybatis/example/Configuration.xml";Reader reader = Resources.getResourceAsReader(resource);sqlMapper = new SqlSessionFactoryBuilder().build(reader);
(2)通过java 代码而不是通过XML 创建配置选项,或者创建自己的配置生成器。MyBatis 提供了一个完整的配置类,它提供了与XML 文件相同的配置选项。
TransactionFactory transactionFactory = new JdbcTransactionFactory();Environment environment =new Environment("development", transactionFactory, dataSource);Configuration configuration = new Configuration(environment);configuration.addMapper(BlogMapper.class);SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(configuration);
4、XML 配置文件的头部,会使用DTD 验证文档来验证该XML 配置文件。body 部分的environment元素,包含了事务管理和连接池配置。mappers 元素指定了映射配置文件----包含SQL 语句和映射定义的XML文件。
三、从SqlSessionFactory获取SqlSession
1、SqlSession 包含了所有执行数据库SQL 语句的方法,能够直接地通过SqlSession 实例执行映射SQL 语句。
SqlSession session = sqlMapper.openSession();try { Blog blog = (Blog) session.selectOne( "org.mybatis.example.BlogMapper.selectBlog", 101);} finally { session.close();}2、可以对给定的映射语句,使用一个正确描述参数与返回值的接口(如BlogMapper.class),就能更清晰地执行类型安全的代码,从而避免错误和异常。
SqlSession session = sqlSessionFactory.openSession();try { BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101);} finally { session.close();}
四、映射SQL语句
1、所有MyBatis 提供的功能特性都可以通过基于XML 映射配置文件配置来实现。
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="org.mybatis.example.BlogMapper"> //namespace:命名空间<select id="selectBlog" parameterType="int" resultType="Blog"> //id:映射语句的名称select * from Blog where id = #{id}</select></mapper>
可替换为:
public interface BlogMapper { @Select("SELECT * FROM blog WHERE id = #{id}") Blog selectBlog(int id);}2、第一种方法
通过指定完整类名“org.mybatis.example.BlogMapper”来访问:直接映射到一个具在相同命名空间的映射类,这个映射类有一个方法的名称、参数及返回类型都与select映射语句相匹配。
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);3、第二种方法
第一它不依赖于字符串,所以更安全;第二,如果IDE 有自动完成功能,可以利用这功能很快导航到映射SQL 语句;第三,不需要关注返回类型,不需要进行强制转换,因为使用BlogMapper 接口已经限定了返回类型,它会安全地返回。
BlogMapper mapper = session.getMapper(BlogMapper.class);Blog blog = mapper.selectBlog(101);4、命名空间
五、作用域和声明周期
SqlSession session = sqlSessionFactory.openSession();try { ......} finally { session.close();}4、Mapper实例
SqlSession session = sqlSessionFactory.openSession();try { BlogMapper mapper = session.getMapper(BlogMapper.class); ......} finally { session.close();}
六、Mapper XML配置
2、XML 配置文件的层次结构如下:configuration、properties、settings、 typeAliases、typeHandlers、objectFactory、plugins、environments、environment、transactionManager、dataSource、mappers
(1)properties元素:它们都是外部化,可替代的属性。
<properties resource="org/mybatis/example/config.properties"> <property name="username" value="dev_user"/> <property name="password" value="F2Fa3!33TYyg"/> </properties>在整个配置文件中,这些属性能够被可动态替换(即使用占位符)的属性值引用:username 和password 将会被替换为配置在properties 元素中的相应值。driver 和url 属性则会被config.properties 文件中的相应值替换。
<dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource>这些属性也可以传递给sqlSessionFactoryBuilder.build()方法。
SqlSessionFactory factory =sqlSessionFactoryBuilder.build(reader, props);......SqlSessionFactory factory =sqlSessionFactoryBuilder.build(reader, environment, props);如果一个属性存在于多个地方,MyBatis 将使用下面的顺序加载: 首先读入properties 元素主体中指定的属性。然后会加载类路径或者properties 元素中指定的url 的资源文件属性。它会覆盖前面已 经读入的重复属性。通过方法参数来传递的属性将最后读取(即通过sqlSessionFactoryBuilder.build),同样也会覆盖从properties 元素指定的和resource/url 指定的重复属性。因此最优先的属性是通过方法参数来传递的属性,然后是通过resource/url 配置的属性,最 后是在MyBatis 的Mapper 配置文件中,properties 元素主体中指定的属性。
(2)settings元素:用于设置和改变MyBatis 运行中的行为。
<settings><setting name="cacheEnabled" value="true"/><setting name="lazyLoadingEnabled" value="true"/><setting name="multipleResultSetsEnabled" value="true"/><setting name="useColumnLabel" value="true"/><setting name="useGeneratedKeys" value="false"/><setting name="enhancementEnabled" value="false"/><setting name="defaultExecutorType" value="SIMPLE"/><setting name="defaultStatementTimeout" value="25000"/></settings>
<typeAliases><typeAlias alias="Author" type="domain.blog.Author"/><typeAlias alias="Blog" type="domain.blog.Blog"/><typeAlias alias="Comment" type="domain.blog.Comment"/><typeAlias alias="Post" type="domain.blog.Post"/><typeAlias alias="Section" type="domain.blog.Section"/><typeAlias alias="Tag" type="domain.blog.Tag"/></typeAliases>(4)typeHandlers元素:每当MyBatis 设置参数到PreparedStatement 或者从ResultSet 结果集中取得值时,就会使用TypeHandler 来处理数据库类型与java 类型之间转换。
七、mybatis接口注解
@Select("select * from user where id= #{id}")
八、mybatis动态SQL语句
1、if 语句 (简单的条件判断)
2、choose (when、otherwize) ,相当于java 语言中的 switch ,与 jstl 中的choose 很类似
3、trim (对包含的内容加上 prefix,或者 suffix 等,前缀,后缀)
4、where (主要是用来简化sql语句中where条件判断的,能智能的处理 and or ,不必担心多余导致语法错误)
5、set (主要用于更新时)
6、foreach (在实现 mybatis in 语句查询时特别有用)
7、bind
- 学习Mybatis:Mybatis的使用
- MyBatis插件的使用:mybatis-generator、mybatis-plugin、mybatis-pagehelper
- MyBatis框架的使用
- mybatis limit的使用
- MyBatis的使用
- Mybatis的使用
- MyBatis框架的使用
- MyBatis框架的使用
- Mybatis的参数使用
- MyBatis的基本使用
- mybatis collection的使用
- mybatis association的使用
- MyBatis In的使用
- myBatis Like 的使用
- Mybatis-generator的使用
- mybatis 的简单使用
- mybatis简单的使用
- Mybatis ResultMap的使用
- Java 线程与线程池简例
- js中变量的声明和变量的命名规范
- node.js学习之node的安装
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 二分答案 哈希/后缀数组
- RequireJS加载js文件
- mybatis的使用
- Python的中文编码问题
- Android 拷贝db文件到sqlite数据库。
- Android Studio 超级简单的打包生成apk
- Java设计模式之三:工厂方法模式
- redis常见面试题
- Java实训第9天(面向对象)
- C++中的强制类型转换
- MaterialDesign学习篇(一),MaterialDesign的介绍