标签:select att 运行 exception 连接数 交互 space objects 结果
1、Mybatis概述
MyBatis 是支持普通 SQL 查询(相比较于Hibernate的封装,Mybatis是半自动化的JDBC封装,一个特点就是Mybatis执行的SQL查询语句需要自己在配置文件中写),存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录。
2、Mybatis原理解析
下面以Mybatis简单的执行流程
1、加载mybatis全局配置文件(数据源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项。
2、SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory,用来开启SqlSession。
3、SqlSession对象完成和数据库的交互:
a、用户程序调用mybatis接口层api(即Mapper接口中的方法)
b、SqlSession通过调用api的Statement ID找到对应的MappedStatement对象
c、通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象
d、JDBC执行sql。
e、借助MappedStatement中的结果映射关系,将返回结果转化成HashMap、JavaBean等存储结构并返回。
下面是Mybatis的框架原理图
3、Mybatis简单实例
(1)导入相关jar包以及Mybatis运行环境核心jar包和连接数据库的包
(2)创建一张简单的数据表
(3)创建Java对象(PO类型)
1 package cn.mybatis.po; 2 3 public class User { 4 private int id; 5 private String username; 6 private String password; 7 private String address; 8 private String sex; 9 10 public int getId() { 11 return id; 12 } 13 14 public String getUsername() { 15 return username; 16 } 17 18 public String getPassword() { 19 return password; 20 } 21 22 public String getAddress() { 23 return address; 24 } 25 26 public String getSex() { 27 return sex; 28 } 29 30 public void setId(int id) { 31 this.id = id; 32 } 33 34 public void setUsername(String username) { 35 this.username = username; 36 } 37 38 public void setPassword(String password) { 39 this.password = password; 40 } 41 42 public void setAddress(String address) { 43 this.address = address; 44 } 45 46 public void setSex(String sex) { 47 this.sex = sex; 48 } 49 50 @Override 51 public String toString() { 52 return "User{" + 53 "id=" + id + 54 ", username=‘" + username + ‘\‘‘ + 55 ", password=‘" + password + ‘\‘‘ + 56 ", address=‘" + address + ‘\‘‘ + 57 ", sex=‘" + sex + ‘\‘‘ + 58 ‘}‘; 59 } 60 }
(4)创建Mybatis核心配置文件(SqlMapConfig.xml)
在核心配置文件配置连接数据库的相关信息,(如果是和Spring整合,则可以放在Spring配置文件中进行对数据库的配置)
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!--加载资源文件--> 7 <!-- <properties resource="jdbc.properties"></properties> 8 <!–settings配置LOG4J输出日志 –> 9 <settings> 10 <setting name="logImpl" value="LOG4J"/> 11 </settings>--> 12 <!--typeAliases配置包的别名--> 13 14 <!--environments配置了数据库连接,配置了driver、url、username、password属性--> 15 <environments default="development"> 16 <environment id="development"> 17 <transactionManager type="JDBC"> 18 <!--<property name="" value="" />--> 19 </transactionManager> 20 <dataSource type="POOLED"> 21 <property name="driver" value="com.mysql.jdbc.Driver" /> 22 <property name="url" value="jdbc:mysql:///mybatis01" /> 23 <property name="username" value="root" /> 24 <property name="password" value="123" /> 25 </dataSource> 26 </environment> 27 </environments> 28 <!--配置一个SQL语句和映射的配置文件--> 29 <mappers> 30 <mapper resource="UserMapper.xml" /> 31 </mappers> 32 </configuration>
(5)创建一个Mapper.xml文件,对应编写所需要的Sql查询操作
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!--mapper为根元素,namespace指定了命名空间--> 6 <mapper namespace="test"> 7 <!--定义一个SELECT查询--> 8 <!--parameterType:指定输入参数的类型--> 9 <!--#{}表示占位符--> 10 <!--#{id}:其中的id表示的就是接受的输入参数, 11 参数名称就是id, 12 这里指出:如果输入参数是简单类型,#{}中的参数名可以任意设置(value或者其他名称)--> 13 <!--resultType:指定输出类型(即指定输出结果所映射的Java对象类型)--> 14 <select id="findUserById" parameterType="int" resultType="cn.mybatis.po.User"> 15 SELECT * FROM t_user WHERE id = #{id} 16 </select> 17 </mapper>
(7)创建测试程序,对刚刚编写的select查询进行测试
1 package cn.mybatis.first; 2 3 import cn.mybatis.po.User; 4 import org.apache.ibatis.io.Resources; 5 import org.apache.ibatis.session.SqlSession; 6 import org.apache.ibatis.session.SqlSessionFactory; 7 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 8 9 import java.io.IOException; 10 import java.io.InputStream; 11 12 public class Test { 13 14 public User findUserById() throws IOException { 15 //得到mybatis配置文件 16 String resource = "SqlMapConfig.xml"; 17 //得到配置文件的文件流信息 18 InputStream inputStream = Resources.getResourceAsStream(resource); 19 //创建会话工厂 传入mybatis的配置文件信息 20 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 21 //通过会话工厂得到SqlSession 22 SqlSession sqlSession = sqlSessionFactory.openSession(); 23 //通过sqlSession来操作数据库 24 //第一个参数就是映射文件中statment的id:namespace +statment的id 25 //第二个参数就是制定映射文件中的parameterType类型的参数 26 User user = sqlSession.selectOne("test.findUserById",1); 27 //System.out.println(user); 28 29 //释放会话资源 30 31 try { 32 sqlSession.close(); 33 } catch (Exception e) { 34 e.printStackTrace(); 35 } 36 return user; 37 } 38 39 public static void main(String[] args) { 40 // TODO Auto-generated method stub 41 Test test = new Test(); 42 43 try { 44 System.out.println(test.findUserById()); 45 } catch (IOException e) { 46 e.printStackTrace(); 47 } 48 49 } 50 }
(8)加入Log4j日志文件
1 ### direct log messages to stdout ### 2 3 log4j.rootLogger=DEBUG, stdout 4 5 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 6 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
(9)测试结果
标签:select att 运行 exception 连接数 交互 space objects 结果
原文地址:https://www.cnblogs.com/fsmly/p/10324491.html