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 ****** ...
随机推荐
- oracle 9i相关问题
Oracle 9i在连接数据库的时候需要加上双引号,如sqlplus “sys/oracle@orcl as sysdba” Oracle 9i不支持bigfile大的表空间创建,oracle9i或以 ...
- mac 安装jdk1.5
前期准备 Java安装包 JDK 1.5:Java for Mac OS X 10.5 Update 10(From: Apple) 辅助工具 Pacifist:用于提取*.dmg安装包中的文件(点我 ...
- 0-js判断电脑或手机登录
<script type="text/javascript"> try{ if(/Android|webOS|iPhone|iPod|BlackBerry/i.test ...
- java 支付宝 第三方即时到账支付 接口
alipay 的几个内核功能文件:=================================================================================== ...
- 5.开发webservice
package com.atguigu.ws; import javax.jws.WebMethod; import javax.jws.WebService; /** * * @author Adm ...
- js计算相隔天数日期
计算40天前的日期: var temp = new Date();console.log(temp);var tempValue = temp.getTime() - 40 * 24* 60*60*1 ...
- oracle优化:避免全表扫描(高水位线)
如果我们查询了一条SQL语句,这条SQL语句进行了全表扫描,那到底是扫描了多少个数据块呢?是表有多少数据,就扫描多少块吗?不是的.而是扫描高水位线一下的所有块.有的时候有人经常说,我的表也不大呀,怎么 ...
- Microsoft.CompactFramework.CSharp.targets not found
今天打开VS2008的智能设备项目,报以下错误,应该是文件找不到了. The imported project "C:\WINDOWS\Microsoft.NET\Framework\v3. ...
- python:字符串转换成字节的三种方式
str='zifuchuang' 第一种 b'zifuchuang'第二种bytes('zifuchuang',encoding='utf-8')第三种('zifuchuang').encode('u ...
- jQuery瀑布流插件——jQuery.Waterfall
插件--jQuery.Waterfall 思路: 其实只要了解了整个流程,要实现这个插件也不难,大家都玩过俄罗斯方块吧,原理差不多,找到合适的地方叠上去就好了,在这里,每个块的宽度是必需给定的,然后计 ...