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 ****** ...
随机推荐
- Url通配符映射
原文:http://www.cnblogs.com/liukemng/p/3726897.ht 1.URL路径映射 1.1.对一个action配置多个URL映射: 我们把上一篇中的HelloWorld ...
- TortoiseGit上传项目到GitHub////////////////////////////z
1.安装msysgit和TortoiseGit : 2.TortoiseGit 设置: (1).确保安装成功: (2).设置用户名和邮箱: 3.登陆github并进入设置页面: 4.添加 SSH Ke ...
- 安装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 ...
- 实测:Windows 8.1 (Windows Blue) 第三方桌面应用无法支持Retina屏,效果与Windows8.0似无差别。
首先我是在VMWARE下装的Windows Blue,是否改用BootCamp直接装就没问题我不知道,理论上应该无差别. 谣言里那个Windows Blue里的缩放功能可以完美支持Retina,但实际 ...
- 当display=none时,元素和子元素高度为0的解决办法
在前端中为了某种需要,我们需要获取display=none的元素或者子元素的实际高度来进行某些处理,然而html对display=none的元素和子元素是不进行渲染的,如果我们没有规定这些元素的高度那 ...
- NIO SelectionKey中定义的4种事件
SelectionKey.OP_ACCEPT —— 接收连接继续事件,表示服务器监听到了客户连接,服务器可以接收这个连接了 SelectionKey.OP_CONNECT —— 连接就绪事件,表示客户 ...
- 4.Git的安装
最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Window ...
- 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 ...
- 阿里yum源
转:http://mirrors.aliyun.com/help/centos?spm=5176.bbsr150321.0.0.d6ykiD 1.备份 mv /etc/yum.repos.d/Cent ...
- [译]Dynamics AX 2012 R2 BI系列-Cube概览
https://msdn.microsoft.com/EN-US/library/dd252604.aspx Cube是一个多维度的结构,它是BI应用开发的基础.本文描述了cube的组成部分, ...