学习网站:
http://www.mybatis.cn/
http://blog.csdn.net/isea533/article/category/2092001
http://www.mybatis.org/mybatis-3/zh/index.html
http://www.mybatis.org/spring/zh/index.html
http://www.mybatis.tk/
传统 jdbc 的弊端:
· jdbc 底层没有用连接池 ,需要频繁的创建和关闭连接 。消耗很大的资源。
· 原生的jdbc操作在 java代码中,一旦需要更改sql语句,需要重新编译部署,不利于系统维护。
· 使用PreparedStatement预编译的话对变量进行设置123数字,这样的序号不利于维护。
· 对返回结果集也需要硬编码。
mybatis介绍:
mybatis是一个orm 持久层框架,Objectrelationmapping对象关系映射。它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
快速入门:http://www.mybatis.org/mybatis-3/zh/getting-started.html
1)maven 依赖
```
org.mybatis
mybatis
x.x.x
```
2)mybatis-config.xml :
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实 例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,可使从 classpath 或其他位置加载资源文件更加容易。
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。
3) mapper 文件: 映射sql语句执行。
4)测试:
~xml形式
@Test
public void test01 () throws IOException {
InputStream configuration = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
SqlSession sqlSession = sqlSessionFactory.openSession();
Object o = sqlSession.selectOne("selectUser", 1);
System.out.println(o);
}
selectOne 第一个参数就是mapper 文件中定义的id ,第二个就是传入参数
~ 使用annotation 注解方式
·全局指定接口:
·接口使用@Select等注解
public interface UserInfoMapper {
@Select("select * from user_info where id = #{id}")
UserInfo selectUser(Integer id);
}
·测试
@Test
public void test02 () throws IOException {
InputStream configuration = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserInfoMapper mapper = sqlSession.getMapper(UserInfoMapper.class);
UserInfo userInfo = mapper.selectUser(1);
System.out.println(userInfo);
}
2)settings
对mybatis 极为重要的调整设置,可改变mybatis 运行时行为。
3)typeAliases:
类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关。
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 若有注解,则别名为其注解值。
使用注解
@Alias("author")
public class Author {
...
}
4)objectFactory 对象工厂:
MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。 如果想覆盖对象工厂的默认行为,则可以通过创建自己的对象工厂来实现。
// ExampleObjectFactory.java
public class ExampleObjectFactory extends DefaultObjectFactory {
public Object create(Class type) {
return super.create(type);
}
public Object create(Class type, List constructorArgTypes, List
5) plugins 插件 :
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。
6) environments 配置环境:
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。
每个数据库对应一个 SqlSessionFactory 实例。创建实例时需指定那个环境
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);
7)transactionManager 事务管理器 :
在 MyBatis 中有两种类型的事务管理器(也就是 type=”[JDBC|MANAGED]”):
JDBC :直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
MANAGED :几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。例如:
Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
8) dataSource 数据源:
有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”):
9) mappers 映射器:
sql语句执行 映射定位。
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.7
mysql
mysql-connector-java
${mysql-connector-java.version}
2)配置mybatis-genrtator.xml
去掉注释:
3) mybatis-generator:generateXMLMAPPER|ANNOTATEDMAPPER
完成。