一、Mybatis介绍

  MyBatis是一个支持普通SQL查询存储过程高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

二、准备开发环境

  导入jar包

  【mybatis

  

  oracle

  

  生成数据库

  

三、使用MyBatis查询表中的数据

  1、添加Mybatis的配置文件conf.xml

  在src目录下创建一个mybatis.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>
<properties resource="db.properties"></properties> <!-- 定义一个别名们 -->
<typeAliases>
<!-- <typeAlias type="com.model.TestId" alias="a"/> -->
<package name="com.model"/>
</typeAliases>
<!-- mybatis的环境们 -->
<environments default="test">
<environment id="test">
<!-- mybatis支持的事务
JDBC:数据源自己的事务管理
MANAGE(托管),不支持tomcat,一般用在大型的商业服务器,weblogic,jboss
-->
<transactionManager type="JDBC"></transactionManager> <!-- 数据源链接类型:PLOOLED,UNOOLED,JNDI
POOLED:连接池
JJNDI:使用应用服务器的数据源连接
-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<!-- <environment id="test1"> </environment>
<environment id="test2"> </environment> -->
</environments>
<mappers>
<mapper resource="com/dao/UsersMapper.xml"/>
</mappers>
</configuration>

  db.properties文件如下:

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=root
password=123

  2、定义表所对应的实体类,如下图所示:

  

  

package com.model;
// Generated 2017-4-19 10:19:42 by Hibernate Tools 5.2.0.CR1 import java.math.BigDecimal; import org.apache.ibatis.type.Alias; /**
* TestId generated by hbm2java
*/
public class TestId { private BigDecimal id;
private String username;
private String password; public TestId() {
} public TestId(BigDecimal id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
} public BigDecimal getId() {
return this.id;
} public void setId(BigDecimal id) {
this.id = id;
} public String getUsername() {
return this.username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return this.password;
} public void setPassword(String password) {
this.password = password;
} public boolean equals(Object other) {
if ((this == other))
return true;
if ((other == null))
return false;
if (!(other instanceof TestId))
return false;
TestId castOther = (TestId) other; return ((this.getId() == castOther.getId())
|| (this.getId() != null && castOther.getId() != null && this.getId().equals(castOther.getId())))
&& ((this.getUsername() == castOther.getUsername()) || (this.getUsername() != null
&& castOther.getUsername() != null && this.getUsername().equals(castOther.getUsername())))
&& ((this.getPassword() == castOther.getPassword()) || (this.getPassword() != null
&& castOther.getPassword() != null && this.getPassword().equals(castOther.getPassword())));
} public int hashCode() {
int result = 17; result = 37 * result + (getId() == null ? 0 : this.getId().hashCode());
result = 37 * result + (getUsername() == null ? 0 : this.getUsername().hashCode());
result = 37 * result + (getPassword() == null ? 0 : this.getPassword().hashCode());
return result;
} }

  3、定义操作test表的sql映射文件userMapper.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="com.dao.UsersMapper">
<!-- 当数据库表字段和实体类字段不一样时重新定义的方法,在实体类中username改为username1来实验 -->
<!-- <resultMap type="testId" id="user">
<result property="username1" column="USERNAME" jdbcType="number" javaType="String"/>
</resultMap>
<select id="list1" resultMap="user">
select * from test
</select> -->
<resultMap type="testId" id="users"></resultMap>
<!-- 查所有表 -->
<select id="list" resultType="testId">
select * from test
</select> <!-- 增 -->
<insert id="add" parameterType="testId">
insert into test values(sq_mybatis.nextval,#{username},#{password})
</insert> <!-- 删 -->
<delete id="delete" parameterType="Integer">
delete test t where t.id=#{id}
</delete> <!-- 改 -->
<update id="update" parameterType="testId">
update test t set t.username=#{username},t.password=#{password} where t.id=#{id}
</update> <!-- 查集合 -->
<!-- <select id="selectmany" parameterType="Map" resultType="testId" >
select * from test t where t.username like #{p1} and t.password like #{p2}
</select> -->
<select id="selectmany" parameterType="Map" resultMap="users">
select * from test t where t.username like #{p1} and t.password like #{p2}
</select>
</mapper>

  4、创建一个MybatisUtil的和Junit的类,来进行测试

  

  

package com.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MybatisUtil {
private static SqlSessionFactory ssf;
private static SqlSession ss; public static SqlSession getSqlSession(){ InputStream in = null;
//Reader reader = null;
try {
in= Resources.getResourceAsStream("mybatis.xml");
//reader = Resources.getResourceAsReader("mbatis.xml"); ssf= new SqlSessionFactoryBuilder().build(in); ss=ssf.openSession();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ss; }
/*public static void main(String[] args){
System.out.println(getSqlSession());
}*/ }
package com.util;

import static org.junit.Assert.*;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.model.TestId; public class JTest { private SqlSession ss; @Before
public void setUp() throws Exception {
ss= MybatisUtil.getSqlSession();
} @After
public void tearDown() throws Exception {
ss.commit();
ss.close();
} public void test() {
List<TestId> list = ss.selectList("com.dao.UsersMapper.list");
for(TestId t : list ){
System.out.println(t.getPassword());
}
} public void add(){
TestId ti = new TestId();
ti.setUsername("hahah");
ti.setPassword("321");
int n = ss.insert("com.dao.UsersMapper.add",ti);
System.out.println(n);
} public void delete(){
int n = ss.delete("com.dao.UsersMapper.delete",61);
System.out.println(n);
} public void update(){
TestId ti = new TestId();
ti.setId(new BigDecimal(41));
ti.setUsername("哈哈哈");
ti.setPassword("654321");
int n = ss.update("com.dao.UsersMapper.update",ti);
System.out.println(n);
} @Test
public void selectmany(){
Map<String,Object> map = new HashMap<String, Object>();
map.put("p1", "张%");
map.put("p2", "2%");
List<TestId> list=ss.selectList("com.dao.UsersMapper.selectmany",map);
for(TestId t:list){
System.out.println(t.getPassword());
}
} }

  Junit类里面实现了mybatis的增删改查的方法。

  

mybatis的使用及详解的更多相关文章

  1. MyBatis的动态SQL详解

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑,本文详解mybatis的动态sql,需要的朋友可以参考下 MyBatis 的一个强大的特性之一通常是它 ...

  2. 转载 Spring、Spring MVC、MyBatis整合文件配置详解

    Spring.Spring MVC.MyBatis整合文件配置详解   使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用法最好还是看官方文档. ...

  3. Spring MVC、MyBatis整合文件配置详解

    Spring:http://spring.io/docs MyBatis:http://mybatis.github.io/mybatis-3/ Building a RESTful Web Serv ...

  4. MyBatis中@MapKey使用详解

    MyBatis中@MapKey使用详解我们在上一篇文章中讲到在Select返回类型中是返回Map时,是对方法中是否存在注解@MapKey,这个注解我也是第一次看到,当时我也以为是纯粹的返回单个数据对象 ...

  5. 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+SpringMVC项目详解

    http://blog.csdn.net/noaman_wgs/article/details/53893948 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+Spri ...

  6. idea spring+springmvc+mybatis环境配置整合详解

    idea spring+springmvc+mybatis环境配置整合详解 1.配置整合前所需准备的环境: 1.1:jdk1.8 1.2:idea2017.1.5 1.3:Maven 3.5.2 2. ...

  7. Mybatis SQL映射文件详解

    Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...

  8. Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解

    封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...

  9. Mybatis(三) 映射文件详解

    前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...

  10. 深入理解mybatis原理, Mybatis初始化SqlSessionFactory机制详解(转)

    文章转自http://blog.csdn.net/l454822901/article/details/51829785 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章 ...

随机推荐

  1. Android(java)学习笔记152:采用get请求提交数据到服务器(qq登录案例)

    1.GET请求:    组拼url的路径,把提交的数据拼装url的后面,提交给服务器. 缺点:(1)安全性(Android下提交数据组拼隐藏在代码中,不存在安全问题)  (2)长度有限不能超过4K(h ...

  2. 如何从github上拉取项目中的指定目录

    2010开始,对于GitHub上的每一个Git版本库,现在都可以用SVN命令进行操作,而svn命令则是支持部分检出的. 方法如下: 例如我想下载我的nginxinc/kubernetes-ingres ...

  3. 题解 CF656G 【You're a Professional】

    又是一道假黑题 它教会我们不要看难度标签 虽然这道题的数据范围很小,用cin能过,但我还是要讲一下快读 快读嘛,顾名思义,就是 快速读入 的意思 有同学就会问了,快速读入的原理是什么? 答:它的原理其 ...

  4. CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第三节

    原文链接 第三节:错误处理和全局内存性能局限 恭喜!通过对CUDA(Compute Unified DeviceArchitecture,即计算统一设备架构的首字母缩写)系列文章第一节和第二节,您现在 ...

  5. java Html&JavaScript面试题:判断第二个日期比第一个日期大

    如何用脚本判断用户输入的的字符串是下面的时间格式2004-11-21 必须要保证用户的输入是此格式,并且是时间,比如说月份不大于12等等,另外我需要用户输入两个,并且后一个要比前一个晚,只允许用JAV ...

  6. Django之视图和URL配置

    1.在创建项目时,Django会自动创建URL配置,在urls.py文件中 文件的默认内容如下所示: """mysite URL Configuration The ur ...

  7. k8s资源配置清单的书写格式(yaml文件)

    yaml文件书写格式:5大类:apiVersion: 选择kubectl api-versions里面存在的版本kind: 选择kubectl api-resources结果中的对象资源metadat ...

  8. kubernetes搭建dashboard-v1.10.1

    一键部署脚本(或者可使用helm安装): wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/ ...

  9. JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)

    3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Det ...

  10. stark组件(1):动态生成URL

    项目启动时自动生成URL 效果图: 知识点: Django启动前通过apps下的ready方法执行一个可以生成URL的py文件 include函数主要返回有三个元素的一个元组.第一个是url配置(ur ...