01.MyBatis入门
2015-11-16 22:43
489 查看
MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/
[/code]2.数据库建表
[/code]3.创建实体类
[/code]
[/code]创建配置文件mybatis-config.xml
[/code]实体类映射文件:mapping/TeacherMapper.xml:
[/code]2.直接使用API创建SqlSessionFactory 如果你更愿意直接从Java程序而不是XML文件中创建configuration,或者创建你自己的configuration构建器,MyBatis也提供了完整的配置类,提供所有和XML文件相同功能的配置项。
[/code]
[/code]参数“mapping.TeacherDao.getTeacherById”就指定是TeacherMapper.xml文件中select语句(通过“namespace” + “id”)2.使用接口关联映射文件TeacherMapper.xml创建接口:TeacherDao
[/code]使用MyBatis的Mapper功能,获取接口实例,并使用:
[/code]使用Mapper接口的方式,不用写接口实现类接口完成数据库操作,简单方便,此方法是官方推荐。是MyBatis一种很重要的用法。注意:使用 Mapper 接口调用必须具备以下条件:Mapper 接口方法名 和 TeacherMapper.xml中定义的每个 sql 的 id 同名。
Mapper 接口方法的输入参数类型和 TeacherMapper.xml中定义的 sql parameterType类型相同。
Mapper 接口的输出参数类型和 TeacherMapper.xml中 定义的 sql 的 resultType类型相同。
TeacherMapper.xml文件中的 namespace即是 Mapper 接口的类路径。
2.SqlSessionFactory SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。因此 SqlSessionFactory 的最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。
3.SqlSession 每个线程都应该有它自己的SqlSession实例。SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Serlvet架构中的HttpSession。如果你现在正在使用一种Web框架,要考虑SqlSession放在一个和HTTP请求对象相似的范围中。换句话说,每次收到的HTTP请求,就可以打开一个SqlSession,返回一个响应,就关闭它。这个关闭操作是很重要的,你应该把这个关闭操作放到finally块中以确保每次都能执行关闭。4.映射器实例(Mapper Instances) 映射器是创建用来绑定映射语句的接口。映射器接口的实例是从SqlSession中获得的。因此从技术层面讲,映射器实例的最大范围是和SqlSession相同的,因为它们都是从SqlSession里被请求的。尽管如此,映射器实例的最佳范围是方法范围。也就是说,映射器实例应该在调用它们的方法中被请求,用过之后即可废弃。并不需要显式地关闭映射器实例,尽管在整个请求范围(request scope)保持映射器实例也不会有什么问题,但是很快你会发现,像SqlSession一样,在这个范围上管理太多的资源的话会难于控制。所以要保持简单,最好把映射器放在方法范围(method scope)内。-------------------------------------------------------------------------------------------------------------------------------
来自为知笔记(Wiz)
1.使用MyBatis前的准备
1.增加Maven依赖<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
[/code]2.数据库建表
CREATE TABLE tb_teacher
(
id bigint NOT NULL auto_increment COMMENT 'ID',
no varchar(10) NOT NULL COMMENT '教师编号',
name varchar(50) NOT NULL COMMENT '教师姓名',
sex char(1) NOT NULL COMMENT '教师性别',
job_title varchar(50) NOT NULL COMMENT '职称',
PRIMARY KEY (id)
) COMMENT = '教师信息表';
INSERT INTO tb_teacher (no, name, sex, job_title) VALUES ('001', 'Test01', 'f', '教师01');
INSERT INTO tb_teacher (no, name, sex, job_title) VALUES ('002', 'Test02', 'f', '教师02');
INSERT INTO tb_teacher (no, name, sex, job_title) VALUES ('003', 'Test03', 'f', '教师03');
[/code]3.创建实体类
package model;
import java.io.Serializable;
/** 教师信息表 */
public class Teacher implements Serializable
{
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 教师编号 */
private String no;
/** 教师姓名 */
private String name;
/** 教师性别 */
private String sex;
/** 职称 */
private String job_title;
......
}
[/code]
2.创建SqlSessionFactory
1.使用XML配置文件创建SqlSessionFactory 每个基于 MyBatis的应用都是以一个SqlSessionFactory的实例为中心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例。 从XML文件中构建SqlSessionFactory的实例非常简单,建议使用类路径下的资源文件进行配置。但是也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置。MyBatis包含一个名叫Resources的工具类,它包含一些实用方法,可使从classpath或其他位置加载资源文件更加容易。String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
[/code]创建配置文件mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="lizhiwei" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapping/TeacherMapper.xml" />
</mappers>
</configuration>
[/code]实体类映射文件:mapping/TeacherMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapping.TeacherDao">
<select id="getTeacherById" resultType="model.Teacher" parameterType="_int">
select * from tb_teacher WHERE id = #{id};
</select>
</mapper>
[/code]2.直接使用API创建SqlSessionFactory 如果你更愿意直接从Java程序而不是XML文件中创建configuration,或者创建你自己的configuration构建器,MyBatis也提供了完整的配置类,提供所有和XML文件相同功能的配置项。
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
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);
[/code]
3.创建SqlSession操作数据库
1.直接使用映射文件TeacherMapper.xml中的SQLTeacher teacher = sqlSession.selectOne("mapping.TeacherDao.getTeacherById",1);
System.out.println(teacher);
sqlSession.close();
[/code]参数“mapping.TeacherDao.getTeacherById”就指定是TeacherMapper.xml文件中select语句(通过“namespace” + “id”)2.使用接口关联映射文件TeacherMapper.xml创建接口:TeacherDao
package mapping;
import model.Teacher;
public interface TeacherDao
{
public Teacher getTeacherById(int id);
}
[/code]使用MyBatis的Mapper功能,获取接口实例,并使用:
TeacherDao teacherDao = sqlSession.getMapper(TeacherDao.class);
teacher = teacherDao.getTeacherById(2);
System.out.println(teacher);
sqlSession.close();
[/code]使用Mapper接口的方式,不用写接口实现类接口完成数据库操作,简单方便,此方法是官方推荐。是MyBatis一种很重要的用法。注意:使用 Mapper 接口调用必须具备以下条件:Mapper 接口方法名 和 TeacherMapper.xml中定义的每个 sql 的 id 同名。
Mapper 接口方法的输入参数类型和 TeacherMapper.xml中定义的 sql parameterType类型相同。
Mapper 接口的输出参数类型和 TeacherMapper.xml中 定义的 sql 的 resultType类型相同。
TeacherMapper.xml文件中的 namespace即是 Mapper 接口的类路径。
4.各种主要接口实例的生命周期
1.SqlSessionFactoryBuilder 这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。因此SqlSessionFactoryBuilder实例的最佳范围是方法范围(也就是局部方法变量)。你可以重用SqlSessionFactoryBuilder来创建多个 SqlSessionFactory 实例,但是最好还是不要让其一直存在以保证所有的 XML 解析资源开放给更重要的事情。2.SqlSessionFactory SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。因此 SqlSessionFactory 的最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。
3.SqlSession 每个线程都应该有它自己的SqlSession实例。SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Serlvet架构中的HttpSession。如果你现在正在使用一种Web框架,要考虑SqlSession放在一个和HTTP请求对象相似的范围中。换句话说,每次收到的HTTP请求,就可以打开一个SqlSession,返回一个响应,就关闭它。这个关闭操作是很重要的,你应该把这个关闭操作放到finally块中以确保每次都能执行关闭。4.映射器实例(Mapper Instances) 映射器是创建用来绑定映射语句的接口。映射器接口的实例是从SqlSession中获得的。因此从技术层面讲,映射器实例的最大范围是和SqlSession相同的,因为它们都是从SqlSession里被请求的。尽管如此,映射器实例的最佳范围是方法范围。也就是说,映射器实例应该在调用它们的方法中被请求,用过之后即可废弃。并不需要显式地关闭映射器实例,尽管在整个请求范围(request scope)保持映射器实例也不会有什么问题,但是很快你会发现,像SqlSession一样,在这个范围上管理太多的资源的话会难于控制。所以要保持简单,最好把映射器放在方法范围(method scope)内。-------------------------------------------------------------------------------------------------------------------------------
来自为知笔记(Wiz)
相关文章推荐
- Java用ArrayList实现队列
- iOS小技巧-第三方sdk官网汇总(逐步积累)
- ACM 2015 亚洲区域赛北京赛区A题(二分)
- iOS - 常用正则表达式
- saltstack 的web平台集群部署(2)---haproxy的部署
- [POJ 2777] Count Color Splay树
- C++ 标准库类型-String,Vector and Bitset
- Java 计算日期加、减一天
- java锁的种类以及辨析(一):自旋锁
- [神器推荐]node-webkit:跨平台桌面web应用的神器,非常有用(转)
- C++ Primer 变量和基本类型
- redhat6.7更换yum源
- (转) 果巨的模板
- toolButton
- js 转义
- ACdream 1135 MST
- ORACLE恢复删除表或表记录
- 每天进步一点点生活就是进步的
- 第一个Sprint冲刺第六天
- java 中基本类型和字符串之间的相互转换