阿里云服务器免费领卷啦。

捡代码论坛-最全的游戏源码下载技术网站!

 找回密码
 立 即 注 册

QQ登录

只需一步,快速开始

搜索
关于源码区的附件失效或欺骗帖, 处理办法
查看: 2663|回复: 0

mybaits入门(含实例教程和源码)

[复制链接]

4208

主题

210

回帖

12万

积分

管理员

管理员

Rank: 9Rank: 9Rank: 9

积分
126189
QQ
发表于 2016-5-14 14:22:33 | 显示全部楼层 |阅读模式

前言:mybatis是一个非常优秀的存储过程和高级映射的优秀持久层框架。大大简化了,数据库操作中的常用操作。下面将介绍mybatis的一些概念和在eclipse上的实际项目搭建使用。

一、mybatis的概念介绍

1.1、背景介绍

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。

用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类—-Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。

1.2、总体流程

(1)加载配置并初始化
触发条件:加载配置文件
将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)接收调用请求
触发条件:调用Mybatis提供的API
传入参数:为SQL的ID和传入参数对象
处理过程:将请求传递给下层的请求处理层进行处理。

(3)处理操作请求 触发条件:API接口层传递请求过来
传入参数:为SQL的ID和传入参数对象
处理过程:
(A)根据SQL的ID查找对应的MappedStatement对象。
(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
(E)释放连接资源。

(4)返回处理结果将最终的处理结果返回。

1.3、功能架构

功能架构讲解:
我们把Mybatis的功能架构分为三层:

(1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

(2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

1.4、框架架构

框架架构讲解:

(1)加载配置:配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)SQL解析:当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参数。

(3)SQL执行:将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果。

(4)结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本数据类型,并将最终结果返回。

1.5、动态SQL

MyBatis 最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。尽管与动态SQL一起工作不是在开一个party,但是MyBatis确实能通过在任何映射SQL语句中使用强大的动态SQL来改进这些状况。

动态SQL元素对于任何使用过JSTL或者类似于XML之类的文本处理器的人来说,都是非常熟悉的。在上一版本中,需要了解和学习非常多的元素,但在MyBatis 3 中有了许多的改进,现在只剩下差不多二分之一的元素。MyBatis使用了基于强大的OGNL表达式来消除了大部分元素。

二、mybatis实例

接下来的mybatis的实例是在eclipse+maven+MySQL的基础上写的,如果猿友们,没有搭建好maven,甚至没有听过maven的,那么请阅读博主的关于maven的文章:http://blog.csdn.net/u013142781/article/details/50316383(含实例哦)
如果mysql没有搭建好的话,可以阅读博主的另外一篇文章:http://blog.csdn.net/u013142781/article/details/50300233

1、创建表,并插入数据:

  1. CREATE TABLE `t_user` (
  2.   `USER_ID` int(11) NOT NULL AUTO_INCREMENT,
  3.   `USER_NAME` char(30) NOT NULL,
  4.   `USER_PASSWORD` char(10) NOT NULL,
  5.   PRIMARY KEY (`USER_ID`),
  6.   KEY `IDX_NAME` (`USER_NAME`)
  7. ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8
复制代码
  1. INSERT INTO t_user (USER_ID, USER_NAME, USER_PASSWORD) VALUES (1, 'luoguohui', '123456');
  2. INSERT INTO t_user (USER_ID, USER_NAME, USER_PASSWORD) VALUES (2, 'zhangsan', '123456');
复制代码

2、添加包的依赖,我的文章 Maven之初恋,已经创建好的maven项目,现在只需要添加如下依赖:


  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  2.   <modelVersion>4.0.0</modelVersion>
  3.   <groupId>com.luo</groupId>
  4.   <artifactId>first_maven_project</artifactId>
  5.   <version>0.0.1-SNAPSHOT</version>

  6.   <properties>
  7.         <!-- spring版本号 -->
  8.         <spring.version>3.2.8.RELEASE</spring.version>
  9.         <!-- log4j日志文件管理包版本 -->
  10.         <slf4j.version>1.6.6</slf4j.version>
  11.         <log4j.version>1.2.12</log4j.version>
  12.         <!-- junit版本号 -->
  13.         <junit.version>4.10</junit.version>
  14.         <!-- mybatis版本号 -->
  15.         <mybatis.version>3.2.1</mybatis.version>
  16.   </properties>

  17.   <dependencies>
  18.         <!-- 添加Spring依赖 -->
  19.         <dependency>
  20.             <groupId>org.springframework</groupId>
  21.             <artifactId>spring-core</artifactId>
  22.             <version>${spring.version}</version>
  23.         </dependency>
  24.         <dependency>
  25.             <groupId>org.springframework</groupId>
  26.             <artifactId>spring-webmvc</artifactId>
  27.             <version>${spring.version}</version>
  28.         </dependency>
  29.         <dependency>
  30.             <groupId>org.springframework</groupId>
  31.             <artifactId>spring-context</artifactId>
  32.             <version>${spring.version}</version>
  33.         </dependency>
  34.         <dependency>
  35.             <groupId>org.springframework</groupId>
  36.             <artifactId>spring-context-support</artifactId>
  37.             <version>${spring.version}</version>
  38.         </dependency>
  39.         <dependency>
  40.             <groupId>org.springframework</groupId>
  41.             <artifactId>spring-aop</artifactId>
  42.             <version>${spring.version}</version>
  43.         </dependency>
  44.         <dependency>
  45.             <groupId>org.springframework</groupId>
  46.             <artifactId>spring-aspects</artifactId>
  47.             <version>${spring.version}</version>
  48.         </dependency>
  49.         <dependency>
  50.             <groupId>org.springframework</groupId>
  51.             <artifactId>spring-tx</artifactId>
  52.             <version>${spring.version}</version>
  53.         </dependency>
  54.         <dependency>
  55.             <groupId>org.springframework</groupId>
  56.             <artifactId>spring-jdbc</artifactId>
  57.             <version>${spring.version}</version>
  58.         </dependency>
  59.         <dependency>
  60.             <groupId>org.springframework</groupId>
  61.             <artifactId>spring-web</artifactId>
  62.             <version>${spring.version}</version>
  63.         </dependency>

  64.         <!--单元测试依赖 -->
  65.         <dependency>
  66.             <groupId>junit</groupId>
  67.             <artifactId>junit</artifactId>
  68.             <version>${junit.version}</version>
  69.             <scope>test</scope>
  70.         </dependency>

  71.         <!-- 日志文件管理包 -->
  72.         <!-- log start -->
  73.         <dependency>
  74.             <groupId>log4j</groupId>
  75.             <artifactId>log4j</artifactId>
  76.             <version>${log4j.version}</version>
  77.         </dependency>
  78.         <dependency>
  79.             <groupId>org.slf4j</groupId>
  80.             <artifactId>slf4j-api</artifactId>
  81.             <version>${slf4j.version}</version>
  82.         </dependency>
  83.         <dependency>
  84.             <groupId>org.slf4j</groupId>
  85.             <artifactId>slf4j-log4j12</artifactId>
  86.             <version>${slf4j.version}</version>
  87.         </dependency>
  88.         <!-- log end -->

  89.         <!--spring单元测试依赖 -->
  90.         <dependency>
  91.             <groupId>org.springframework</groupId>
  92.             <artifactId>spring-test</artifactId>
  93.             <version>${spring.version}</version>
  94.             <scope>test</scope>
  95.         </dependency>

  96.         <!--mybatis依赖 -->
  97.         <dependency>
  98.             <groupId>org.mybatis</groupId>
  99.             <artifactId>mybatis</artifactId>
  100.             <version>${mybatis.version}</version>
  101.         </dependency>

  102.         <!-- mybatis/spring包 -->
  103.         <dependency>
  104.             <groupId>org.mybatis</groupId>
  105.             <artifactId>mybatis-spring</artifactId>
  106.             <version>1.2.0</version>
  107.         </dependency>

  108.         <!-- mysql驱动包 -->
  109.         <dependency>
  110.             <groupId>mysql</groupId>
  111.             <artifactId>mysql-connector-java</artifactId>
  112.             <version>5.1.29</version>
  113.         </dependency>
  114.     </dependencies>

  115. </project>
复制代码

3、配置文件:

3.1、mybatis包下添加mybatis-config.xml文件(mybatis配置文件):


  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  4. <configuration>   
  5. </configuration>
复制代码

3.2、properties包下添加jdbc.properties文件(数据源配置文件):

  1. jdbc_driverClassName=com.mysql.jdbc.Driver
  2. jdbc_url=jdbc:mysql://localhost:3306/luo
  3. jdbc_username=root
  4. jdbc_password=root
复制代码

3.3、mapper包下userMapper.xml配置文件(表映射文件):

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.luo.dao.UserDao">
  5. <!--设置domain类和数据库中表的字段一一对应,注意数据库字段和domain类中的字段名称不致,此处一定要!-->
  6.     <resultMap id="BaseResultMap" type="com.luo.domain.User">
  7.         <id column="USER_ID" property="userId" jdbcType="INTEGER" />
  8.         <result column="USER_NAME" property="userName" jdbcType="CHAR" />
  9.         <result column="USER_PASSWORD" property="userPassword" jdbcType="CHAR" />
  10.     </resultMap>
  11.     <!-- 查询单条记录 -->
  12.     <select id="selectUserById" parameterType="int" resultMap="BaseResultMap">
  13.         SELECT * FROM t_user WHERE USER_ID = #{userId}
  14.     </select>
  15. </mapper>
复制代码

3.4、spring配置文件application.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  4.     xmlns:aop="http://www.springframework.org/schema/aop"
  5.     xsi:schemaLocation="  
  6.            http://www.springframework.org/schema/beans  
  7.            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.            http://www.springframework.org/schema/aop  
  9.            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  10.            http://www.springframework.org/schema/context  
  11.            http://www.springframework.org/schema/context/spring-context-3.0.xsd">

  12.      <!-- 引入jdbc配置文件 -->  
  13.      <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  14.         <property name="locations">
  15.             <list>
  16.                <value>classpath:properties/*.properties</value>
  17.                 <!--要是有多个配置文件,只需在这里继续添加即可 -->
  18.             </list>
  19.         </property>
  20.     </bean>



  21.     <!-- 配置数据源 -->
  22.     <bean id="dataSource"
  23.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  24.         <!-- 不使用properties来配置 -->
  25.         <!-- <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  26.             <property name="url" value="jdbc:mysql://localhost:3306/learning" />
  27.             <property name="username" value="root" />
  28.             <property name="password" value="christmas258@" /> -->
  29.        <!-- 使用properties来配置 -->
  30.         <property name="driverClassName">
  31.             <value>${jdbc_driverClassName}</value>
  32.         </property>
  33.         <property name="url">
  34.             <value>${jdbc_url}</value>
  35.         </property>
  36.         <property name="username">
  37.             <value>${jdbc_username}</value>
  38.         </property>
  39.         <property name="password">
  40.             <value>${jdbc_password}</value>
  41.         </property>
  42.     </bean>

  43.     <!-- 自动扫描了所有的XxxxMapper.xml对应的mapper接口文件,这样就不用一个一个手动配置Mpper的映射了,只要Mapper接口类和Mapper映射文件对应起来就可以了。 -->
  44.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  45.         <property name="basePackage"
  46.             value="com.luo.dao" />
  47.     </bean>

  48.     <!-- 配置Mybatis的文件 ,mapperLocations配置**Mapper.xml文件位置,configLocation配置mybatis-config文件位置-->
  49.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  50.         <property name="dataSource" ref="dataSource" />
  51.         <property name="mapperLocations" value="classpath:mapper/*.xml"/>  
  52.         <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
  53.         <!-- <property name="typeAliasesPackage" value="com.tiantian.ckeditor.model"
  54.             /> -->
  55.     </bean>

  56.     <!-- 自动扫描注解的bean -->
  57.     <context:component-scan base-package="com.luo.service" />

  58. </beans>
复制代码

4、接口和类的配置:



4.1、com.luo.domain下添加User.java文件:

  1. package com.luo.domain;

  2. public class User {

  3.     private Integer userId;  
  4.     private String userName;  
  5.     private String userPassword;  


  6.     public Integer getUserId() {  
  7.         return userId;  
  8.     }  

  9.     public void setUserId(Integer userId) {  
  10.         this.userId = userId;  
  11.     }  

  12.     public String getUserName() {  
  13.         return userName;  
  14.     }  

  15.     public void setUserName(String userName) {  
  16.         this.userName = userName;  
  17.     }  

  18.     public String getUserPassword() {  
  19.         return userPassword;  
  20.     }  

  21.     public void setUserPassword(String userPassword) {  
  22.         this.userPassword = userPassword;  
  23.     }  

  24. }
复制代码

4.2、com.luo.dao下添加UserDao.java文件

  1. package com.luo.dao;

  2. import com.luo.domain.User;

  3. public interface UserDao {

  4.     /**
  5.      * @param userId
  6.      * @return User
  7.      */
  8.     public User selectUserById(Integer userId);  

  9. }
复制代码

4.3、com.luo.service下添加UserService.java接口和UserServiceImpl实现类:

  1. package com.luo.service;

  2. import com.luo.domain.User;

  3. public interface UserService {
  4.     User selectUserById(Integer userId);  
  5. }
复制代码
  1. package com.luo.service;

  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Service;
  4. import com.luo.dao.UserDao;
  5. import com.luo.domain.User;

  6. @Service  
  7. public class UserServiceImpl implements UserService {

  8.     @Autowired  
  9.     private UserDao userDao;  

  10.     public User selectUserById(Integer userId) {  
  11.         return userDao.selectUserById(userId);  

  12.     }  
  13. }
复制代码

5、单元测试



5.1、com.luo.baseTest下添加SpringTestCase.java:

  1. package com.luo.baseTest;

  2. import org.junit.runner.RunWith;  
  3. import org.springframework.test.context.ContextConfiguration;  
  4. import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;  
  5. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  

  6. //指定bean注入的配置文件  
  7. @ContextConfiguration(locations = { "classpath:application.xml" })  
  8. //使用标准的JUnit @RunWith注释来告诉JUnit使用Spring TestRunner  
  9. @RunWith(SpringJUnit4ClassRunner.class)  
  10. public class SpringTestCase extends AbstractJUnit4SpringContextTests {

  11. }
复制代码

5.2、com.luo.service添加UserServiceTest.java:

  1. package com.luo.service;

  2. import org.junit.Test;  
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import com.luo.baseTest.SpringTestCase;  
  5. import com.luo.domain.User;

  6. public class UserServiceTest extends SpringTestCase {

  7.     @Autowired  
  8.     private UserService userService;

  9.     @Test  
  10.     public void selectUserByIdTest(){  
  11.         User user = userService.selectUserById(1);  
  12.         System.out.println(user.getUserName() + ":" + user.getUserPassword());
  13.     }  
  14. }
复制代码

5.3、运行单元测试,UserServiceTest右键Run As –>Junit Test,运行结果:



6、实例源码下载

http://download.csdn.net/detail/u013142781/9374560

。。




捡代码论坛-最全的游戏源码下载技术网站! - 论坛版权郑重声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与捡代码论坛-最全的游戏源码下载技术网站!享有帖子相关版权
3、捡代码论坛版权,详细了解请点击。
4、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
5、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
6、如无法链接失效或侵犯版权,请给我们来信:jiandaima@foxmail.com

回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立 即 注 册

本版积分规则

技术支持
在线咨询
QQ咨询
3351529868

QQ|手机版|小黑屋|捡代码论坛-专业源码分享下载 ( 陕ICP备15015195号-1|网站地图

GMT+8, 2024-4-27 19:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表