MyBatis

  mybatis和hibernate都属于orm(对象与关系映射) 框架

  mybatis的优点:

    1.sql-mapping :操作更自由,可控性高,执行效率更高

    2.轻量,学习更容易

    3.维护和修改容易

  mybatis使用场合:

    在不需要太多复杂的功能,且需要性能更高,并且希望更灵活可以使用mybatis

    什么时候不宜使用mybatis:

      对象持久化对程序完全透明时,使用hibernate

      当数据有移植需求且需要支持多种数据库是

      当应用程序要求完全动态sql时

      没有使用关系数据库时

  使用mybatis需要使用到架包:

    

     下载架包

       

     


     下面开始我么第一个mybatis练习:、

      1.建一个项目:

      2.配置mybatis-config.xml  (帮助文档 里面可以查找到 )

      3.建一个实体类

      4.创建一个mapper文件   (可以在帮助文档里面查看) 

      5.创建dao 封装类

      6.测试

先上代码:

      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>
<settings>
<setting name="cacheEnabled" value="true"/> </settings>
<!-- -->
<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:@localhost:1521:xe"/>
<property name="username" value="super_user"/>
<property name="password" value="abc123"/>
</dataSource>
</environment>
</environments> <!-- 映射文件,可以配置多个 -->
<mappers>
<mapper resource="dao/grade.xml"/> </mappers> </configuration>

mybatis-config.xml

      grade.xml: 

 <?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="dao.MyBatis01Dao">
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
<!-- parameterType="int" 指定传入参数类型 id最好与接口里面的方法名一致-->
<select id="testgetGrade" resultType="entity.Grade">
select * from grade where gradeid=1
</select>
<resultMap type="entity.Grade" id="gradeMap"> </resultMap>
<select id="testBatis1" parameterType="int" resultMap="gradeMap">
select * from grade where gradeid>=#{gradeid}
</select>
<select id="seleTrend" parameterType="entity.Grade" resultType="entity.Grade">
select * from grade where 1=1
<if test ="gradeid != null">
<![CDATA[
and gradeid<= #{gradeid}
]]> </if>
<if test ="gradename != null">
<!-- 模糊查询 -->
<![CDATA[
and gradename like '%${gradename}%'
]]>
</if> </select> <insert id="insertGrade" parameterType="entity.Grade" flushCache="true" >
insert into grade values(#{gradeid},#{gradename}) </insert>
<insert id="insertGradeBySeq" parameterType="entity.Grade" flushCache="true">
<selectKey keyProperty="gradeid" resultType="int" order="BEFORE">
select seq_gradeindex.nextVal from dual
</selectKey>
insert into grade values(#{gradeid},#{gradename}) </insert>
<delete id="delGrade" parameterType="entity.Grade" flushCache="true" >
delete grade where gradeid=#{gradeid} </delete>
<update id="upGrade" parameterType="entity.Grade" flushCache="true" >
update grade set gradename=#{gradename} where gradeid=#{gradeid} </update> <!-- 动态查询 -->
<select id="testTrendSele1" parameterType="entity.Student" resultType="entity.Student">
select * from student where 1=1
<if test="stuno != null">
<![CDATA[
and stuno<=#{stuno}
]]> </if>
<if test="name != null">
<![CDATA[
and name like '%${name}%'
]]>
</if>
<if test="gradeid != null">
<![CDATA[
and gradeid>=#{gradeid}
]]>
</if> </select>
<!-- MyBatis where 查询 -->
<select id="testTrendSeleByWhere" parameterType="entity.Student" resultType="entity.Student">
select * from student
<where>
<if test="stuno != null">
<![CDATA[
and stuno<=#{stuno}
]]> </if>
<if test="name != null">
<![CDATA[
and name like '%${name}%'
]]>
</if>
<if test="gradeid != null">
<![CDATA[
and gradeid>=#{gradeid}
]]>
</if>
</where> </select>
<!-- choose查询 -->
<select id="testTrendSeleByChoose" parameterType="entity.Student" resultType="entity.Student"> select * from student where 1=1
<choose>
<when test="stuno != null">
<![CDATA[
and stuno<=#{stuno}
]]>
</when>
<when test="name != null">
<![CDATA[
and name like '%${name}%'
]]>
</when>
<otherwise>
<![CDATA[
and gradeid>=#{gradeid}
]]>
</otherwise>
</choose> </select>
<!-- set 动态更新 -->
<update id="testTrendSeleBySet" parameterType="entity.Grade">
update grade
<set>
<if test="gradename != null">
gradename=#{gradename}
</if> </set>
where gradeid=#{gradeid} </update> </mapper>

grade.xml

      dao.GradeDaoImpl:

 package dao.impl;

 import java.io.Reader;
import java.util.List; import junit.framework.TestCase;
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 org.junit.Test; import util.MyBatisUtil; import dao.MyBatis01Dao;
import entity.Grade;
import entity.Student; public class GradeImplDao extends TestCase implements MyBatis01Dao{ String resource="mybatis-config.xml";
Reader reader=null;
SqlSessionFactory factory=null;
SqlSession session=null;
/**
* 测试 有参方法
*/ public void testV(){
try {
//session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession();
//MyBatis01Dao con=session.getMapper(MyBatis01Dao.class);
//con.testBatis1(5); //testBatis1(2);
// Grade grade=new Grade();
// grade.setGradeid(7);
// grade.setGradename("");
//delGrade(grade);
//insertGrade(grade);
//upGrade(grade);
//seleTrend(grade);
Student student=new Student(25,"ab%d",2);
//testTrendSele1(student);
testTrendSeleByChoose(student);
//testTrendSeleByWhere(student);
//testTrendSeleBySet(student);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
//session.close();
} }
/**
* 第一个mybatis查询
*/ public void testgetGrade(){
try {
//读取配置文件
reader=Resources.getResourceAsReader(resource);
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
//创建sqlsessionfactory
factory=builder.build(reader);
session=factory.openSession();
//读取
List grade=session.selectList("testgetGrade");
System.out.println(grade);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
session.close(); } } /**
* 传入一个参数查询 seleGradeByPara
*/
public void testBatis1(int id){
try {
//创建并且打开session
session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession();
//设置参数
List grade=session.selectList("testBatis1",id);
System.out.println(grade);
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭
session.close(); }
} /**
* 新增
*/
@Override
public void insertGrade(Grade grade) {
try {
//打开
session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession();
//新增
session.insert("insertGrade",grade);
session.commit();
//显示
System.out.println(session.selectList("testBatis1",1));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
session.close();
} } /**
* 删除指定
* @param grade
*/
public void delGrade(Grade grade){
try {
session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession();
session.delete("delGrade",grade);
session.commit();
System.out.println(session.selectList("testBatis1",1)); } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
session.close();
} }
/**
* 更新
* @param grade
*/
public void upGrade(Grade grade){
try {
session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession();
session.update("upGrade",grade);
session.commit();
System.out.println(session.selectList("testBatis1",1));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
session.close();
}
} /**
* 动态查询
* @param grade
*/
public void seleTrend(Grade grade){
try {
session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession(); System.out.println(session.selectList("seleTrend", grade)); } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
session.close();
} } /**
* 测试更新
*/
public void testForUpdate(){
try {
session=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource)).openSession();
Grade grade=new Grade();
grade.setGradename("研究院");
session.insert("insertGradeBySeq",grade);
session.commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
session.rollback();
}finally{
session.close(); } } @Override
public void testTrendSele1(Student student) {
try {
//System.out.println("111111111");
session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession();
List students=session.selectList("testTrendSele1",student);
for(int i=0;i<students.size();i++){
System.out.println(students.get(i)); } } catch (Exception e) {
e.printStackTrace();
}
finally{
if(session != null)
session.close();
}
} @Override
public void testTrendSeleByWhere(Student student) {
// TODO Auto-generated method stub
try {
session=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource)).openSession();
//代替 where 1=1 where字句
List students=session.selectList("testTrendSeleByWhere",student);
for(int i=0;i<students.size();i++){
System.out.println(students.get(i)); }
} catch (Exception e) {
e.printStackTrace();
}
finally{
session.close();
}
} @Override
public void testTrendSeleByChoose(Student student) {
// TODO Auto-generated method stub
try {
session=MyBatisUtil.getSession();
//choose: 只查询 其中一个条件,从上到下执行
List students=session.selectList("testTrendSeleByChoose",student);
for(int i=0;i<students.size();i++){
System.out.println(students.get(i)); }
MyBatisUtil.closeSession();
session=MyBatisUtil.getSession();
List students2=session.selectList("testTrendSeleByChoose",student);
System.out.println("---------"+(students==students2)+"----------"); } catch (Exception e) {
e.printStackTrace();
}
finally{
MyBatisUtil.closeSession();
} } @Override
public void testTrendSeleBySet(Student student) {
// TODO Auto-generated method stub
try {
session=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource)).openSession();
Grade grade=new Grade();
grade.setGradeid(2);
grade.setGradename("一年级");
session.update("testTrendSeleBySet", grade);
session.commit();
System.out.println("success!");
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
finally{
MyBatisUtil.closeSession();
} } @Test
public void testname() {
System.out.println("11111");
} }

GradeDaoImpl

      entity.Grade

 package entity;

 import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
/**
* 年级实体类
* @author Administrator
*
*/
public class Grade implements Serializable{
//年级编号
private Integer gradeid;
//年级
private String gradename; @Override
public String toString() {
// TODO Auto-generated method stub
return gradeid+"\t"+gradename;
} public Grade(){} public Integer getGradeid() {
return gradeid;
}
public void setGradeid(Integer gradeid) {
this.gradeid = gradeid;
}
public String getGradename() {
return gradename;
}
public void setGradename(String gradename) {
this.gradename = gradename;
} }

Grade

      config配置文件中:

        主要配置了数据库连接信息

        以及映射文件的位置信息

      

      mapper配置文件:

        配置了各种sql语句,与config关联起来需要在config里面写上这句代码:

        <mappers>
        <mapper resource="dao/grade.xml"/>
        </mappers>

     mybatis支持哪些操作:

        增 删 改 查

     实现普通查询:

      1.配置mapper 

      <mapper namespace="dao接口包"/>   

        <select id="testgetGrade" resultType="entity.Grade">
          select * from grade where gradeid=1
        </select>

        解释:

          id:我们在dao.impl里面去操作数据库时,指定sql语句就根据id指定,id尽量与接口提供的方法同名(后面讲getMapper()可以看出作用   )

          resultType:返回值类型,支持各种类型

        2.在dao里面写代码:

          mybatis也是基于session的

          1、声明一个sqlSessionFactory对象、SqlSession对象、Reader对象

          2、读取配置文件

            //指定config路径

            String resource="mybatis-config.xml";

            //读取配置文件

            reader=Resources.getResourceAsReader(resource);

            //声明sqlsessionfactorybuilder
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            //创建sqlsessionfactory
            factory=builder.build(reader);

            //开启sqlsession
            session=factory.openSession();
            //读取
            List grade=session.selectList("testgetGrade");
            //打印

            System.out.println(grade);

            暂时介绍select方法;

              selectlist方法返回的是一个list集合

           上面的代码里面包含了,查询,删除,修改,新增,动态查询,缓存的方法,结合帮助文档可以看明白

           下次做详细深入的总结

            

            

MyBatis 入门(一)的更多相关文章

  1. MyBatis1:MyBatis入门

    MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...

  2. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  3. MyBatis入门基础(一)

    一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...

  4. MyBatis入门案例、增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  5. mybatis入门_mybatis基本原理以及入门程序

    一.传统jdbc存在的问题 1.创建数据库的连接存在大量的硬编码, 2.执行statement时存在硬编码. 3.频繁的开启和关闭数据库连接,会严重影响数据库的性能,浪费数据库的资源. 4.存在大量的 ...

  6. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  7. MyBatis入门学习(二)

    在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...

  8. MyBatis入门学习(一)

    一.MyBatis入门简要介绍(百科) MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyB ...

  9. MyBatis入门案例 增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  10. MyBatis入门(五)---延时加载、缓存

    一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...

随机推荐

  1. Url通配符映射

    原文:http://www.cnblogs.com/liukemng/p/3726897.ht 1.URL路径映射 1.1.对一个action配置多个URL映射: 我们把上一篇中的HelloWorld ...

  2. TortoiseGit上传项目到GitHub////////////////////////////z

    1.安装msysgit和TortoiseGit : 2.TortoiseGit 设置: (1).确保安装成功: (2).设置用户名和邮箱: 3.登陆github并进入设置页面: 4.添加 SSH Ke ...

  3. 安装hive+mysql

    1.源码安装mysql 以root用户首先安装libaio-0.3.104.tar.gz tar zxvf libaio-0.3.104.tar.gz cd libaio-0.3.104 make p ...

  4. 实测:Windows 8.1 (Windows Blue) 第三方桌面应用无法支持Retina屏,效果与Windows8.0似无差别。

    首先我是在VMWARE下装的Windows Blue,是否改用BootCamp直接装就没问题我不知道,理论上应该无差别. 谣言里那个Windows Blue里的缩放功能可以完美支持Retina,但实际 ...

  5. 当display=none时,元素和子元素高度为0的解决办法

    在前端中为了某种需要,我们需要获取display=none的元素或者子元素的实际高度来进行某些处理,然而html对display=none的元素和子元素是不进行渲染的,如果我们没有规定这些元素的高度那 ...

  6. NIO SelectionKey中定义的4种事件

    SelectionKey.OP_ACCEPT —— 接收连接继续事件,表示服务器监听到了客户连接,服务器可以接收这个连接了 SelectionKey.OP_CONNECT —— 连接就绪事件,表示客户 ...

  7. 4.Git的安装

    最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Window ...

  8. install phpexcel using composer in thinkPHP

    Environment Window 10.1 XAMPP 7.0.9 (PHP 7.0.9) thinkPHP 5.0.1 Steps # visit https://getcomposer.org ...

  9. 阿里yum源

    转:http://mirrors.aliyun.com/help/centos?spm=5176.bbsr150321.0.0.d6ykiD 1.备份 mv /etc/yum.repos.d/Cent ...

  10. [译]Dynamics AX 2012 R2 BI系列-Cube概览

    https://msdn.microsoft.com/EN-US/library/dd252604.aspx     Cube是一个多维度的结构,它是BI应用开发的基础.本文描述了cube的组成部分, ...