Mybatis框架原理
来源:互联网 发布:重庆网络推广怎样 编辑:程序博客网 时间:2024/06/06 18:00
Mybatis框架原理
1、Mybatis 是什么:
MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 使用简单的 XML 或注解来配置和映射基本体,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
1、Mybatis-Config.xml (Mybatis的全局配置文件,名称不定)配置了数据源、事务等 Mybatis 运行环境
2、Student.xml 映射文件(配置 sql 语句)
3、SqlSessionFactory (会话工厂)根据配置文件配置工厂、创建 SqlSession
4、SqlSession (会话)面向用户的接口、操作数据库(发出 sql 增删改查)
5、Executor (执行器)是一个接口(基本执行器、缓存执行器)、SqlSession 内部通过执行器操作数据库
6、Mapped Statement (底层封装对象)对操作数据库存储封装,包括 sql 语句、输入参数、输出结果类型
配置
在pom.xml中加入所需要的jar包(mybatis、odjbc、junit等);
先添加要依赖的包,对应的dependency,可以下面在这个网站找,然后将那段代码复制到pom.xml中。
http://mvnrepository.com/
Mybatis-Config.xml
配置 Mybatis 的运行环境、数据源、事务等
<?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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/> <property name="username" value="fafa"/> <property name="password" value="oracle"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/StudentMapper.xml"/> </mappers></configuration>
Mybatis自带Generator工具类
package com.fafa.test;import java.io.File;import java.util.ArrayList;import java.util.List;import org.mybatis.generator.api.MyBatisGenerator;import org.mybatis.generator.config.Configuration;import org.mybatis.generator.config.xml.ConfigurationParser;import org.mybatis.generator.internal.DefaultShellCallback;public class GenerateMbgConfig { /* * Mybatis自带Generator工具生成相应东西 */ public static void generate(File file){ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = null; try { config = cp.parseConfiguration(file); } catch (Exception e) { e.printStackTrace(); return; } DefaultShellCallback callback = new DefaultShellCallback(overwrite); try { MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); } catch (Exception e) { e.printStackTrace(); return; } System.out.println("生成Mybatis配置成功!"); } public static void main(String[] args) { GenerateMbgConfig.generate(new File("./src/main/java/com/fafa/test/mybatis-generator-config.xml")); }}
Mybatis生成文件配置
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration> <classPathEntry location="C:/Users/fafa/.m2/repository/com/oracle/ojdbc6/11.2.0.3/ojdbc6-11.2.0.3.jar" /> <context id="mybatisDemoForMysql" targetRuntime="MyBatis3"> <!-- 控制注释 --> <commentGenerator> <!-- 是否去除所有自动生成的注释文件 --> <property name="suppressAllComments" value="true" /> <!-- 是否去除所有自动生成的文件的时间戳,默认为false --> <property name="suppressDate" value="false" /> </commentGenerator> <!-- 控制数据库 --> <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521/ORCL" userId="fafa" password="oracle" /> <javaTypeResolver> <!-- 把jdbc中的decimal与numberic类型转化为integer类型 --> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- 数据库表对应的model --> <javaModelGenerator targetPackage="com.fafa.test.model" targetProject="src/main/java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- 控制Model的xmlMapper文件 --> <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- 控制mapper接口 --> <javaClientGenerator targetPackage="com.fafa.test.dao" type="XMLMAPPER" targetProject="src/main/java"> <property name="enableSubPackages" value="true" /> <property name="methodNameCalculator" value="extended" /> </javaClientGenerator> <table tableName="STUDENT" domainObjectName="Student" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> </context></generatorConfiguration>
测试
package com.fafa.test;import java.io.InputStream;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.fafa.test.dao.StudentMapper;import com.fafa.test.model.Student;/** * MyBaties测试 * @author fafa * @data Jan 22, 2017 * @time 11:23:30 AM * */public class MyBatisTest { private StudentMapper studentMapper; List<Student> info=studentMapper.selectAllInfo(); public static void main(String[] args) { try { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); try { StudentMapper mapper = session.getMapper(StudentMapper.class); List<Student> studentInfos = mapper.selectAllInfo(); if (studentInfos == null) { System.out.println("The result is null."); } else { System.out.println("编号\t姓名\t性别\t出生日期\t\t班级"); for (Student student : studentInfos) { System.out.println(student.getStudentId()+"\t"+student.getStudentName()+"\t" +student.getStudentSex()+"\t"+student.getStudentBirthday()+"\t"+student.getClassId()); } } } finally { session.close(); } } catch (Exception ex) { ex.printStackTrace(); } }}
查询结果
0 0
- mybatis框架原理
- mybatis框架原理
- mybatis框架原理
- Mybatis框架原理
- Mybatis框架原理
- mybatis框架原理
- Mybatis---框架原理
- mybatis框架及原理
- Mybatis框架基础原理
- 【SpringMVC+mybatis】2.mybatis框架原理
- myBatis学习--myBatis框架原理理解
- Mybatis之Mybatis框架原理(2)
- MyBatis(1)框架原理
- Mybatis基础知识--框架原理篇
- Mybatis框架的运行原理
- mybatis3--1.mybatis框架原理
- springmvc+spring+mybatis框架原理
- mybatis学习之框架原理
- 位操作方法
- Two pointers (1) -- Linked List Cycle II, Rotate List
- linux 文件属性与权限(简单讲解)
- tomcat 启动失败
- button按钮onclick调用的函数名和id相同会导致找不到函数
- Mybatis框架原理
- schedule_work 工作队列
- C++幼儿园[2] - 数据类型和基本语法
- linux下查看文件内容工具发布啦!
- Android 简单的自定义控件(一)之BaseTitle
- 扩展方法
- 概念:全局变量的定义放在 xxx.h文件中更方便些。
- 武汉尚软科技:服务不是一块“吃力不讨好”的骨头(发稿单位:中国电科普华基础软件)
- Android BadgeView红点更新信息提示