mybatis框架详解

mybatis框架

  • mybatis是一款优秀的持久性框架,它支持定制化SQL、存储过程以及高级映射。mybatis避免了几乎所有的jdbc代码和手动获取参数以及获取结果集。mybatis可以使用简单的xml或注解来配置和映射原生信息,将接口和java的pojos(普通的java对象)映射成数据库中的记录。

功能框架:

  1. API接口层(接口应用层):提供外部使用的接口API,开发人员通过这些本地API类操纵数据库。接口层一接收调用请求就会调用数据处理层来完成具体的数据处理(增删改查)。
  2. 数据处理层(sql处理层):负责具体的sql查找、sql解析、sql执行和执行结果的映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
  3. 基础支撑层(平台):负责最基础的功能支撑,包括连接管理、配置加载和缓冲处理,这些都是共同的东西,将他们抽取出来作为最基础最基础的组件。为上层的数据处理层提供最基础的支撑。

框架架构:

  1. 加载配置:
    配置来源于两个方向,一处是配置文件,一处是java代码的注解,将SQL的配置信息加载成一个个mappedstatement对象(包括了传入参数映射配置、执行的sq1语句、结果映射配置),存储在内存中。配置来源于两个方向,一处是配置文件,一处是java代码的注解,将SQL的配置信息加载成一个个mappedstatement对象(包括了传入参数映射配置、执行的sq1语句、结果映射配置),存储在内存中。
  2. SQL解析:
    当API接口层接收到调用请求,会接收到传入的sql的id和传入对象(可以是map、javabean或者基本数据类型),mybatis会根据传入参数对象对mappedstatement进行解析,解析后可以得到最终执行的sql语句和参数。
  3. SQL执行: 将最终得到的sql和参数拿到数据库进行执行,得到操作数据库的结果。
  4. 结果映射: 将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本数据类型,并将最终结果返回。

mybatis具体操作步骤:

(0)数据库数据准备

创建数据库,并在库中创建表

DROP DATABASE IF EXISTS tcgbtms;
CREATE DATABASE tcgbtms default character set utf8;

打开数据库

use tcgbtms

创建表

drop table  if exists `t_members`;
       CREATE TABLE `t_members` (
         `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
         `nickname` varchar(255) DEFAULT NULL COMMENT '昵称',
         `password` char(32) NOT NULL DEFAULT '' COMMENT '密码',
         `realname` varchar(36) NOT NULL DEFAULT '' COMMENT '真实姓名',
         `gender` enum('MALE','FEMALE','NONE') NOT NULL DEFAULT 'NONE' COMMENT '姓名',
         `rank` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '会员等级',
         `email` char(50) NOT NULL DEFAULT '' COMMENT '邮箱',
         `mobile` varchar(15) NOT NULL DEFAULT '' COMMENT '手机号',
         `safequestion` varchar(255) NOT NULL DEFAULT '0' COMMENT '安全问题',
         `safeanswer` char(30) NOT NULL DEFAULT '' COMMENT '安全答案',
         `createdTime` datetime DEFAULT NULL COMMENT '创建时间',
         PRIMARY KEY (`id`)
       ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='会员表';
  • 向表中写入数据

        INSERT INTO `t_members` VALUES 
        (1,'nick-01','123456','real-01','MALE',1,'e1@t.com','11111111111','1+1=?','2',NULL);
        INSERT INTO `t_members` VALUES 
        (2,'nick-02','123456','real-02','FEMALE',1,'e2@t.com','11111111111','1+1=?','2',NULL);
    

(1)在pom.xml文件中配置mybatis中相关配置依赖驱动。 a)引入mysql数据库依赖:

<!--添加mysql驱动程序依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.40</version>
		</dependency>

b)引入mybatis框架依赖

<!—- 添加mybatis框架依赖 -->
        <dependency> 			
          	<groupId>org.mybatis</groupId>
          	   <artifactId>mybatis</artifactId> 	
          	   <version>3.2.8</version>  </dependency>

c)log4j日志管理依赖

<!—添加log4j依赖-->
          <dependency>
          			<groupId>log4j</groupId>
          			<artifactId>log4j</artifactId>
          			<version>1.2.17</version>
          </dependency>

(2)创建MyBatis核心配置文件-- mybatis-config.xml

a)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>
              	<!-- 引入属性配置文件 -->
                <properties resource="configs.properties"/>
                 <!-- 配置mybatis(setting可以配置日志缓存) -->
                 <settings>
                   <setting name="logImpl" value="log4j"/>
                </settings>
               <!-- 配置别名 -->
                <typeAliases>
              		<typeAlias type="cn.tedu.pojo.User" 
              					alias="User"/>
              	</typeAliases>
                <!-- 配置初始化环境(连接) -->
                <environments default="development">
                  <environment id="development">
                    <transactionManager type="JDBC"/>
                    <dataSource type="POOLED">
                      <property name="driver" value="${jdbcDriver}"/>
                      <property name="url"  value="${jdbcUrl}"/>
                      <property name="username" value="${jdbcUser}"/>
                      <property name="password" value="${jdbcPassword}"/>
                    </dataSource>
                  </environment>
                </environments>
            <!-- 不能随便放,添加映射文件,environments之下 -->
              <mappers> 	
              	<mapper resource=MemberMapper.xml"/>
             </mappers>
     </configuration>

b) 配置属性文件configs.properties

log4j.rootLogger=INFO,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c - %m%n

log4j.logger.com.mybatis3=DEBUG
log4j.logger.com.pt=DEBUG(要求规范包名)

(3)创建持久化类和SQL映射文件
a)创建实体类com.pt.member.entity (包名).Member.java(类名)

package com.pt.member.entity;     
             import java.io.Serializable;
              /**
           * 借助实体类对象储存表中数据与对象中数据之间的映射
           */
          public class Member implements Serializable{
          //协议名版本号(序列化与反序列化)
          	private static final long serialVersionUID = 6546546546546546L;
          	private Integer id;
          	private String nickname;
          	private String password;
          	private String realname;
          	private String gender;
          	public Integer getId() {
          		return id;
          	}
          	public void setId(Integer id) {
          		this.id = id;
          	}
          	public String getNickname() {
          		return nickname;
          	}
          	public void setNickname(String nickname) {
          		this.nickname = nickname;
          	}
          	public String getPassword() {
          		return password;
          	}
          	public void setPassword(String password) {
          		this.password = password;
          	}
          	public String getRealname() {
          		return realname;
          	}
          	public void setRealname(String realname) {
          		this.realname = realname;
          	}
          	public String getGender() {
          		return gender;
          	}
          	public void setGender(String gender) {
          		this.gender = gender;
          	}
          	//重写的toString方法,方便查询结果的输出
          	@Override
          	public String toString() {
          		return "Member [id=" + id + ", nickname=" + nickname + ", password=" + password + ", realname=" + realname
          				+ ", gender=" + gender + "]";
          	}
          }
  • b)创建MemberMapper.xml映射文件

       <!—此文件注意namespace(命名空间)、id(唯一标识)、resultType(结果类型) parameterType(参数类型) -->
       <?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="com.pt.member.dao.MemberDao">
       	<select id="findById" resultType="com.pt.member.entity.Member" parameterType="int" >
               select * from t_members where id=#{id}        
       	</select>
       </mapper>
    
  • c)定义接口com.pt.member.dao.MemberDao(类全名:包名+类名)

    - //说明:接口的类全名要与映射文件的命名空间一致。
    - public interface MemberDao{ 
    - 	List<Member> findById(Integer id);
    -  }
    
  • (4)创建测试类

  • a)创建测试基类TestBase:

       public class TestBase {
       //1.声明 factory
       protected SqlSessionFactory factory;
       	@Before
       	public void init() throws Exception{
       	//2.读取配置文件
          InputStream in = 
       Resources.getResourceAsStream("mybatis-configs.xml");
       //3.设置factory
        factory = new SqlSessionFactoryBuilder().build(in);
       	}
       }
       b)创建测试类TestMember:
       public class TestMember extends TestBase {
       	 @Test
       	 public void testFindById () {
       	 		//1.创建SqlSession对象  
       		 	SqlSession session=factory.openSession();
       	 		//2.获取Dao接口  
       		 	MemberDao dao = session.getMapper(MemberDao.class);
       		 	//3.执行SQL操作
       		 	List<Member> list=dao.findById(6);
       	 		//4.输出结果 
       	 		  for(Member m:list) {
       	 			  System.out.println(m);
       	 		  }
       	 		 //5.释放资源
       	 		  session.close();}}
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值