MyBatis介绍:

  MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

  MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

  Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

使用步骤:

创建项目,导入Ojdbc.jar包和mybatis**.jar包,

设置数据库的信息的属性:

 jdbc.username=test
 jdbc.password=test
 jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
 jdbc.driver=oracle.jdbc.OracleDriver

配置mybatis的总配置文件: mybatis-config.xml:

格式:

         配置根标签
         <!-- 根标签 -->
         <configuration>
             <!--
                 引入属性文件
                 属性文件通常写数据库连接的信息
                     username(注意一个问题, 属性文件中不要单独写一个username)
                     password
                     url
                     driverClass
             -->
             <property resource="属性文件所在src下的位置" />

             <!-- 或者直接定义属性值 -->
             <properties>
                 <property name="jdbc.username" value="test" />
                 <property name="jdbc.password" value="test" />
                 <property name="jdbc.driverClassName" value="oracle.jdbc.OracleDriver" />
                 <property name="jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
             </properties>

             <!-- 为实体类定义一个别名, 如果不定义别名, 在映射文件中就要写这个实体类的全路径名 -->
             <typeAliases>
                 <!-- 这个写法取的别名是随意的, 可以自己任意定义 -->
                 <!-- <typeAlias type="类名的全路径名" alias="别名"></typeAlias> -->
                 <!-- 如果使用下面这个写法, 就是按照mybatis自己定义的规则, 这个包下的所有类的类名就是别名 -->
                 <package name="com.model"/>
                 <!-- 使用package标签实际是默认扫描model包下的所有的类, 如果在实体类的定义了注解@Alias(value = "..."), 则优先使用注解 -->
             </typeAliases>

             <!-- 配置mybatis的运行环境们 -->
             <environments default="所使用的环境的标签id">
                 <environment id="default">
                     <!--
                         配置事务管理器的类型
                             JDBC
                             MANAGED--(托管, 商业服务器上才有的功能, Tomcat没有)
                     -->
                     <transactionManager type="JDBC" />
                     <!--
                         POOLED(基于连接池的数据源)
                         UNPOOLED(使用普通的数据库连接)
                         JNDI(使用应用服务器上的JNDI连接配置数据源, 很少使用)
                     -->
                     <dataSource type="POOLED">
                         <property name="username" value="${属性文件中配置的信息}"></property>
                         <property name="password" value="${属性文件中配置的信息}"></property>
                         <property name="url" value="${属性文件中配置的信息}"></property>
                         <property name="driver" value="${属性文件中配置的信息}"></property>
                     </dataSource>
                 </envirment>
             </environments>
             <mappers>
                 <!-- 挨个写明每个映射文件所在的位置 -->
                 <mapper resource="src下mapper映射文件的全路径名">
                 <!-- 写明每个映射文件所对应的接口的限定名, package引入的文件一定是接口,
                 所以如果使用这种方式, 必须是使用接口对应映射文件的方式 -->
                 <package name="接口所在的包" />
             </mappers>
         </configuration>

实例:

 <?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="db.properties"></properties>

     <typeAliases>
         <package name="model"/>
     </typeAliases>

     <environments default="hanqi">
         <environment id="hanqi">
              <!--
                 JDBC:
                 MANAGED:托管
              -->
             <transactionManager type="JDBC" />
              <!--
                 配置数据库源
                 POOLED: 连接池
                 UNPOOLED: 非连接池
                 JNDI: 使用应用服务器上的数据库连接
              -->
             <dataSource type="POOLED">
                 <property name="username" value="${jdbc.username}"/>
                 <property name="password" value="${jdbc.password}"/>
                 <property name="url" value="${jdbc.url}"/>
                 <property name="driver" value="${jdbc.driver}"/>
             </dataSource>
         </environment>

     </environments>

     <mappers>
         <mapper resource="mapper/UserMapper.xml" />
     </mappers>

 </configuration>

新建每个实体类的映射文件...Mapper.xml:

<!-- 定义每个实体类的映射文件 -->
<mapper namespace="唯一的id / 接口的全路径名">
<select id="被调用的id(唯一) / 需要执行的方法名"></select>
<insert></insert>
<update></update>
<delete></delete>
</mapper>

resultType: 类的全路径名 / 定义好的别名
resultMap: 指定返回结果的集合
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="UserMapper">

     <resultMap type="user" id="UserList">
         <result property="id" column="id" />
         <result property="uname" column="uname" />
         <result property="upassword" column="upassword" />
     </resultMap>

     <select id="selectUser" resultType="user">
         select * from p_user
     </select>

     <select id="selectOneUser" parameterType="Integer" resultMap="UserList">
         select * from p_User u where u.id=#{id}
     </select>

     <insert id="insertUser" parameterType="user" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
         insert into p_User values(test1.nextval,#{uname},#{upassword})
     </insert>

     <update id="updateUser" parameterType="Map">
         update p_User u set u.uname=#{uname},u.upassword=#{upassword} where u.id=#{id}
     </update>

     <delete id="deleteUser" parameterType="Map">
         delete p_user u where u.id=#{id}
     </delete>

 </mapper>

MyBatis工具类:

1, 构建SqlSessionFactory
  InputStream in = Resources.getResourceAsStream("总配置文件所在的src下的路径");
  SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
2, 构建SqlSession(注意SqlSession不能以一个class成员变量的身份被返回)
  SqlSession ss = ssf.openSession();
3, 直接运行
  a: 直接运行映射文件中的sql语句
  ss.select...
  ss.insert...
  ss.update...
  ss.delete...
  b: 使用接口映射配置文件
  ss.getMapper(接口类名.class);
  调用接口的方法

 package util;

 import java.io.IOException;
 import java.io.InputStream;

 import org.apache.ibatis.io.Resources;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.session.SqlSessionFactoryBuilder;

 public class MyBatisUtil {

     private static SqlSessionFactory sqlSessionFactory;
     private static SqlSession sqlSession;

     public static void main(String[] args) {
         System.out.println(getSqlSession());
     }

     public static void getSqlSessionFactory(){
         String path="mybatis-config.xml";
         try {
             InputStream in=Resources.getResourceAsStream(path);
             sqlSessionFactory =new SqlSessionFactoryBuilder().build(in);

         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }

     public static SqlSession getSqlSession(){
         SqlSession sqlSession=null;
         if(sqlSession==null){
             getSqlSessionFactory();
         }
         sqlSession=sqlSessionFactory.openSession();
         return sqlSession;
     }

     public static void destory(SqlSession sqlSession){
         sqlSession.commit();
         sqlSession.close();
     }
 }

创建用户实体类,属性和表的列明相对应:

 package model;

 import org.apache.ibatis.type.Alias;
 //别名
 @Alias("user")
 public class User {
     private Integer id;
     private String uname;
     private String upassword;
     public Integer getId() {
         return id;
     }
     public void setId(Integer id) {
         this.id = id;
     }
     public String getUname() {
         return uname;
     }
     public void setUname(String uname) {
         this.uname = uname;
     }
     public String getUpassword() {
         return upassword;
     }
     public void setUpassword(String upassword) {
         this.upassword = upassword;
     }
     @Override
     public String toString() {
         return "User [id=" + id + ", uname=" + uname + ", upassword=" + upassword + "]";
     }

 }

测试:

 package test;

 import static org.junit.Assert.*;

 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;

 import org.apache.ibatis.session.SqlSession;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;

 import model.User;
 import util.MyBatisUtil;

 public class JUTest {

     private SqlSession ss;

     @Before
     public void setUp() throws Exception {
         ss = MyBatisUtil.getSqlSession();
     }

     @After
     public void tearDown() throws Exception {
         MyBatisUtil.destory(ss);
     }

     @Test
     public void test() {
         //查询
         //List<User> list=ss.selectList("UserMapper.selectUser");

         //指定查询
         //List<User> list1=ss.selectList("UserMapper.selectOneUser",1);

         //增加
         User u=new User();
         u.setId(null);
         u.setUname("ccc");
         u.setUpassword("ccc");
         int a = ss.insert("UserMapper.insertUser", u);

         //修改
         /*Map<String, Object> map = new HashMap<String, Object>();
         map.put("id", 10);
         map.put("uname", "233");
         map.put("upassword", "123");
         int a = ss.update("UserMapper.updateUser", map);*/

         //删除
         /*Map<String, Integer> map = new HashMap<String,Integer>();
         map.put("id",113);
         int a=ss.delete("UserMapper.deleteUser", map);*/
         System.out.println(a);
     }

 }

p_user表:

prompt PL/SQL Developer import file
prompt Created on 2017年9月19日 by Administrator
set feedback off
set define off
prompt Dropping P_USER...
drop table P_USER cascade constraints;
prompt Creating P_USER...
create table P_USER
(
  id        NUMBER not null,
  uname     ) not null,
  upassword ) not null
)
tablespace SYSTEM
  pctfree
  pctused
  initrans
  maxtrans
  storage
  (
    initial 64K
    next 1M
    minextents
    maxextents unlimited
  );
alter table P_USER
  add constraint PK_USER primary key (ID)
  using index
  tablespace SYSTEM
  pctfree
  initrans
  maxtrans
  storage
  (
    initial 64K
    next 1M
    minextents
    maxextents unlimited
  );

prompt Disabling triggers for P_USER...
alter table P_USER disable all triggers;
prompt Loading P_USER...
insert into P_USER (id, uname, upassword)
, ');
insert into P_USER (id, uname, upassword)
, ');
insert into P_USER (id, uname, upassword)
, ');
insert into P_USER (id, uname, upassword)
, 'ccc', 'ccc');
insert into P_USER (id, uname, upassword)
, ');
insert into P_USER (id, uname, upassword)
, ');
insert into P_USER (id, uname, upassword)
, ');
insert into P_USER (id, uname, upassword)
, ');
insert into P_USER (id, uname, upassword)
, ');
insert into P_USER (id, uname, upassword)
, ');
insert into P_USER (id, uname, upassword)
, ');
insert into P_USER (id, uname, upassword)
, ');
insert into P_USER (id, uname, upassword)
, ');
insert into P_USER (id, uname, upassword)
, 'ccc', 'ccc');
insert into P_USER (id, uname, upassword)
, 'ccc', 'ccc');
commit;
prompt  records loaded
prompt Enabling triggers for P_USER...
alter table P_USER enable all triggers;
set feedback on
set define on
prompt Done.

MyBatis框架(一)的更多相关文章

  1. Mybatis框架的多对一关联关系(六)

    一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...

  2. Spring+SpringMvc+Mybatis框架集成搭建教程

    一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...

  3. Mybatis框架中实现双向一对多关系映射

    学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...

  4. Hibernate框架与Mybatis框架的对比

    学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...

  5. 初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)

    此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我 ...

  6. Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询

    在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...

  7. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  8. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  9. 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)

    手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...

  10. 详解Java的MyBatis框架中SQL语句映射部分的编写

    这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...

随机推荐

  1. Ngnix+tomcat负载均衡

    系统环境 Centos6.5 nginx1.4.7  https://nginx.org/download/nginx-1.4.7.tar.gz tomcat7.0.79 http://apache. ...

  2. nodejs 语法学习(持续更新)

    合并objects var o1 = { a: 1 }; var o2 = { b: 2 }; var o3 = { c: 3 }; var obj = Object.assign(o1, o2, o ...

  3. VMware Workstation 12 Player之安装林耐斯-Linux Red Hat 7 -系统

    Linux系统之Red Hat 7 安装笔记... Red Hat(红帽)公司(NYSE:RHT)是一家开源解决方案供应商,也是标准普尔500指数成员.总部位于美国北卡罗来纳州的罗利市,截止2015年 ...

  4. 程序猿表白练级之Hello World

    程序猿表白练级之Hello World ... 推荐一个优秀的编程网站:Hello World http://www.he11oworld.com/ The Hello World Collectio ...

  5. PyQt:昨天今天明天表示方法

    PyQt中今天的表示方法如下: QtCore.QDate.currentDate() 那么,明天怎么表示呢? today=QtCore.QDate.currentDate().toJulianDay( ...

  6. QQ推广神器:批量加群、好友、群发。支持批量搜索关键词加群分享下载

    V2.1版本更新说明: 1.新增邮箱导出功能 2.新增一键添加关键词查询结果所有群 3.新增好友验证数学自动计算 4.新增好友验证答案判断 ------------------------------ ...

  7. mysql事件机制——定时任务

    定时任务是老生常谈了,因为我们总是需要定时修改特定的数据. 实现它的方法肯定不止一种,但我在相当长一段时间里都是用程序编码去做的,今天突然想到“为什么一定要采用调用的方式?”,用数据库自身的能力去实现 ...

  8. .NET Core多平台开发体验[1]: Windows

    微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的 ...

  9. [2015-11-23]分享一个批处理脚本,创建iis站点及程序池

    建站批处理 batch_createSites.bat @echo off rem 以管理员身份执行本脚本,可添加多条call 以建立多个站点 call path\to\createSites.bat ...

  10. ElasticSearch和Kibana 5.X集群的安装

    ElasticSearch和Kibana 5.X集群的安装 1.准备工作 1.1.下载安装包 1.2.系统的准备 2.ElasticSearch集群的安装 2.1.修改 config/elastics ...