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 ****** ...
随机推荐
- adminLTE的自动化菜单
一. model from django.db import models # Create your models here. class MenuInfo(models.Model): paren ...
- Hihocoder 1063 缩地
树形dp 涉及不重复背包组合求最小 从边长分段看不好入手 因为点数只有100点值<=2,总值<=200 可以对每个点的每个值进行dp 这里最后不回来肯定优于全回来 然后由于要分为回来和不回 ...
- MySQL的下载与安装 和 navicat for mysql 安装使用
新手上路-MySQL安装 目录结构 Windows平台 MySQL安装 示例数据导入 Linux平台 CentOS系统 Ubuntu系统 FAQ 密码生成工具-keepass 修改提示符 图形工具 删 ...
- ZooKeeper的Znode剖析
在ZooKeeper中,节点也称为znode.由于对于程序员来说,对zk的操作主要是对znode的操作,因此,有必要对znode进行深入的了解. ZooKeeper采用了类似文件系统的的数据模型,其节 ...
- php 无限极
1,递归 public function getInfo(){ $data=$this->select(); $arr=$this->noLimit($data,$f_id=0,$le ...
- gulp 外挂 rename 的使用
安装和使用就不详细说了.前面有. gulpfile.js 的配置 var gulp = require('gulp'), rename = require('gulp-rename'), // 记得先 ...
- HTML5&CSS3练习笔记(一)
属性选择器的用法 格式:[属性/^/*/$=值] 1.[attr=val] 匹配指定值的元素 <div> <div id="section1"> 完全匹配元 ...
- anagularJs指令的controller,link,compile有什么不同
/directives.js增加exampleDirective phonecatDirectives.directive('exampleDirective', function() { retur ...
- XAF 如何将数据库中Byte array图片显示出来
问题比较简单,直接上代码. private Image _Cover; [Size(SizeAttribute.Unlimited), ValueConverter(typeof(ImageValue ...
- 使用JDOM操作XML
JDOM介绍 JDOM是使用Java语言编写的,用于读写及操作XML的一套组件,Jdom同时具有DOM修改文件的优点和SAX读取快速的优点. JDOM的使用 首先下载JDOM的JAR包,本文使用的是j ...