做的好的招投标网站,js获取网站域名,wordpress文章数据下载,做网站搜爬闪一、Mybatis介绍 MyBatis是一个支持普通SQL查询#xff0c;存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射#xff0c;将接口和Java的POJO#xff08;Pla… 一、Mybatis介绍 MyBatis是一个支持普通SQL查询存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射将接口和Java的POJOPlain Old Java Objects普通的Java对象映射成数据库中的记录。 1、Mybatis实现了接口绑定使用更加方便。 在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件 而Mybatis实现了DAO接口与xml映射文件的绑定自动为我们生成接口的具体实现使用起来变得更加省事和方便。 2、对象关系映射的改进效率更高 3、MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。 对于IBatis与MyBatis的区别就不再多说了感兴趣的朋友可以研究一下 MyBatis的框架架构 看到Mybatis的框架图可以清晰的看到Mybatis的整体核心对象我更喜欢用自己的图来表达Mybatis的整个的执行流程。如下图所示 原理详解 MyBatis应用程序根据XML配置文件创建SqlSessionFactorySqlSessionFactory在根据配置配置来源于两个地方一处是配置文件一处是Java代码的注解获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法可以通过SqlSession实例直接运行映射的sql语句完成对数据的增删改查和事务提交等用完之后关闭SqlSession。 MyBatis的优缺点 优点 1、简单易学 mybatis本身就很小且简单。没有任何第三方依赖最简单安装只要两个jar文件配置几个sql映射文件易于学习易于使用通过文档和源代码可以比较完全的掌握它的设计思路和实现 2、灵活 mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能或许更多。 3、解除sql与程序代码的耦合 通过提供DAL层将业务逻辑和数据访问逻辑分离使系统的设计更清晰更易维护更易单元测试。sql和代码的分离提高了可维护性。 4、提供映射标签支持对象与数据库的orm字段关系映射 5、提供对象关系映射标签支持对象关系组建维护 6、提供xml标签支持编写动态sql。 缺点 1、编写SQL语句时工作量很大尤其是字段多、关联表多时更是如此。 2、SQL语句依赖于数据库导致数据库移植性差不能更换数据库。 3、框架还是比较简陋功能尚有缺失虽然简化了数据绑定代码但是整个底层数据库查询实际还是要自己写的工作量也比较大而且不太容易适应快速数据库修改。 4、二级缓存机制不佳 总结 mybatis的优点同样是mybatis的缺点正因为mybatis使用简单数据的可靠性、完整性的瓶颈便更多依赖于程序员对sql的使用水平上了。sql写在xml里虽然方便了修改、优化和统一浏览但可读性很低调试也非常困难也非常受限。 mybatis没有hibernate那么强大但是mybatis最大的优点就是简单小巧易于上手方便浏览修改sql语句。 二、mybatis快速入门 2.1、准备开发环境 1、创建测试项目普通java项目或者是JavaWeb项目均可如下图所示 2、添加相应的jar包 【mybatis】 mybatis-3.1.1.jar 【MYSQL驱动包】 mysql-connector-java-5.1.7-bin.jar 3、创建数据库和表针对MySQL数据库 SQL脚本如下 1 create database mybatis;
2 use mybatis;
3 CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
4 INSERT INTO users(NAME, age) VALUES(孤傲苍狼, 27);
5 INSERT INTO users(NAME, age) VALUES(白虎神皇, 27); 将SQL脚本在MySQL数据库中执行完成创建数据库和表的操作如下 到此前期的开发环境准备工作全部完成。 2.2、使用MyBatis查询表中的数据 1、添加Mybatis的配置文件conf.xml 在src目录下创建一个conf.xml文件如下图所示 conf.xml文件中的内容如下 1 ?xml version1.0 encodingUTF-8?2 !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd3 configuration4 environments defaultdevelopment5 environment iddevelopment6 transactionManager typeJDBC /7 !-- 配置数据库连接信息 --8 dataSource typePOOLED9 property namedriver valuecom.mysql.jdbc.Driver /
10 property nameurl valuejdbc:mysql://localhost:3306/mybatis /
11 property nameusername valueroot /
12 property namepassword valueXDP /
13 /dataSource
14 /environment
15 /environments
16
17 /configuration 2、定义表所对应的实体类如下图所示 User类的代码如下 1 package me.gacl.domain;2 3 /**4 * author gacl5 * users表所对应的实体类6 */7 public class User {8 9 //实体类的属性和表的字段名称一一对应
10 private int id;
11 private String name;
12 private int age;
13
14 public int getId() {
15 return id;
16 }
17
18 public void setId(int id) {
19 this.id id;
20 }
21
22 public String getName() {
23 return name;
24 }
25
26 public void setName(String name) {
27 this.name name;
28 }
29
30 public int getAge() {
31 return age;
32 }
33
34 public void setAge(int age) {
35 this.age age;
36 }
37
38 Override
39 public String toString() {
40 return User [id id , name name , age age ];
41 }
42 } 3、定义操作users表的sql映射文件userMapper.xml 创建一个me.gacl.mapping包专门用于存放sql映射文件在包中创建一个userMapper.xml文件如下图所示 userMapper.xml文件的内容如下 1 ?xml version1.0 encodingUTF-8 ?2 !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd3 !-- 为这个mapper指定一个唯一的namespacenamespace的值习惯上设置成包名sql映射文件名这样就能够保证namespace的值是唯一的4 例如namespaceme.gacl.mapping.userMapper就是me.gacl.mapping(包名)userMapper(userMapper.xml文件去除后缀)5 --6 mapper namespaceme.gacl.mapping.userMapper7 !-- 在select标签中编写查询的SQL语句 设置select标签的id属性为getUserid属性值必须是唯一的不能够重复8 使用parameterType属性指明查询时使用的参数类型resultType属性指明查询返回的结果集类型9 resultTypeme.gacl.domain.User就表示将查询结果封装成一个User类的对象返回
10 User类就是users表所对应的实体类
11 --
12 !--
13 根据id查询得到一个user对象
14 --
15 select idgetUser parameterTypeint
16 resultTypeme.gacl.domain.User
17 select * from users where id#{id}
18 /select
19 /mapper 4、在conf.xml文件中注册userMapper.xml文件 1 ?xml version1.0 encodingUTF-8?2 !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd3 configuration4 environments defaultdevelopment5 environment iddevelopment6 transactionManager typeJDBC /7 !-- 配置数据库连接信息 --8 dataSource typePOOLED9 property namedriver valuecom.mysql.jdbc.Driver /
10 property nameurl valuejdbc:mysql://localhost:3306/mybatis /
11 property nameusername valueroot /
12 property namepassword valueXDP /
13 /dataSource
14 /environment
15 /environments
16
17 mappers
18 !-- 注册userMapper.xml文件
19 userMapper.xml位于me.gacl.mapping这个包下所以resource写成me/gacl/mapping/userMapper.xml--
20 mapper resourceme/gacl/mapping/userMapper.xml/
21 /mappers
22
23 /configuration 5、编写测试代码执行定义的select语句 创建一个Test1类编写如下的测试代码 package me.gacl.test;import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import me.gacl.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class Test1 {public static void main(String[] args) throws IOException {//mybatis的配置文件String resource conf.xml;//使用类加载器加载mybatis的配置文件它也加载关联的映射文件InputStream is Test1.class.getClassLoader().getResourceAsStream(resource);//构建sqlSession的工厂SqlSessionFactory sessionFactory new SqlSessionFactoryBuilder().build(is);//使用MyBatis提供的Resources类加载mybatis的配置文件它也加载关联的映射文件//Reader reader Resources.getResourceAsReader(resource); //构建sqlSession的工厂//SqlSessionFactory sessionFactory new SqlSessionFactoryBuilder().build(reader);//创建能执行映射文件中sql的sqlSessionSqlSession session sessionFactory.openSession();/*** 映射sql的标识字符串* me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值* getUser是select标签的id属性值通过select标签的id属性值就可以找到要执行的SQL*/ //在命名空间“me.gacl.mapping.userMapper”中定义了一个名为“getUser”的映射语句 //这样它就允许你使用指定的完全限定名“me.gacl.mapping.userMapper.getUser”来调用映射语句 //格式命名空间名(namespace)映射语句名(id) String statement me.gacl.mapping.userMapper.getUser;//映射sql的标识字符串//执行查询返回一个唯一user对象的sqlUser user session.selectOne(statement, 1);System.out.println(user);}
} 执行结果如下 可以看到数据库中的记录已经成功查询出来了。 转载于:https://www.cnblogs.com/huangjinwen/p/6061697.html