码迷,mamicode.com
首页 > 其他好文 > 详细

Mybatis简单入门

时间:2019-01-26 18:50:10      阅读:188      评论:0      收藏:0      [点我收藏+]

标签: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 }
User实体类

 

   (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     &lt;!&ndash;settings配置LOG4J输出日志 &ndash;&gt;
 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>
Mybatis核心配置文件

 

   (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>
UserMapper配置文件

 

   (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 }
Test测试程序

 

   (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
Log4j.properties 

   (9)测试结果

  技术分享图片

 

Mybatis简单入门

标签:select   att   运行   exception   连接数   交互   space   objects   结果   

原文地址:https://www.cnblogs.com/fsmly/p/10324491.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!