MyBatis 入门(一)
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 入门(一)的更多相关文章
- MyBatis1:MyBatis入门
MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...
- MyBatis入门基础(一)
一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...
- MyBatis入门案例、增删改查
一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...
- mybatis入门_mybatis基本原理以及入门程序
一.传统jdbc存在的问题 1.创建数据库的连接存在大量的硬编码, 2.执行statement时存在硬编码. 3.频繁的开启和关闭数据库连接,会严重影响数据库的性能,浪费数据库的资源. 4.存在大量的 ...
- MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...
- MyBatis入门学习(二)
在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...
- MyBatis入门学习(一)
一.MyBatis入门简要介绍(百科) MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyB ...
- MyBatis入门案例 增删改查
一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...
- MyBatis入门(五)---延时加载、缓存
一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...
随机推荐
- FusionChart 数据的传入方式
已有案例,懒得写了,放个链接,大家看看吧.http://www.cnblogs.com/liujian21st/archive/2013/03/22/2975124.html
- [Asp.net]Uploadify上传大文件,Http error 404 解决方案
引言 之前使用Uploadify做了一个上传图片并预览的功能,今天在项目中,要使用该插件上传大文件.之前弄过上传图片的demo,就使用该demo进行测试.可以查看我的这篇文章:[Asp.net]Upl ...
- Elasticsearch5.1.1+ik分词器+HEAD插件安装小记
一.安装elasticsearch 1.首先需要安装好java,并配置好环境变量,详细教程请看 http://tecadmin.net/install-java-8-on-centos-rhel-an ...
- 如何让 XE5 发现你的手机
首发在 ① FireMonkey[DELPHI XE5] 165232328 欢迎使用 FMX 开发手机程序的高手来访. 1. 手机开启 USB 调试.不用 ROOT.2. 装驱动.(问题就在这里) ...
- SSO
- Android studio 中的配置编译错误总结
1.编译Andorid 工程的时候,有时候出现gradle 报下面的错误. Error:(1, 0) Cause: com/android/build/gradle/LibraryPlugin : U ...
- python装饰器通俗易懂的解释!
1.python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜有点点开始明白了.总结了一下解释得比较好的,通俗易懂的来说 ...
- Android学习计划
书目 疯狂Android讲义 Android开发艺术探索 Android群英传 Android 源码设计模式解析与实战 Android内核剖析 深入理解 Android自动化测试 代码 信念 坚持.坚 ...
- JS倒计时功能,给定时间返回规定格式倒计时时间
重写了一下,增强了通用性,重写时发现月份和年份计算很复杂,因为月份天数不一样,年份又涉及平年闰年; 本人数学实在不佳无法写出算法,哪位大大日后写出来了分享给小弟一份,谢谢~. <!doctype ...
- Innodb 表空间传输迁移数据
在mysql5.5之前,mysql实例中innodb引擎表的迁移是个头疼的问题,要么使用mysqldump导出,要么使用物理备份的方法,但是在mysql5.6之后的版本中,可以使用一个新特性,方便地迁 ...