MyBatis框架(一)
MyBatis介绍:
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
使用步骤:
创建项目,导入Ojdbc.jar包和mybatis**.jar包,
设置数据库的信息的属性:
jdbc.username=test jdbc.password=test jdbc.url=jdbc:oracle:thin:@localhost:1521:xe jdbc.driver=oracle.jdbc.OracleDriver
配置mybatis的总配置文件: mybatis-config.xml:
格式:
配置根标签 <!-- 根标签 --> <configuration> <!-- 引入属性文件 属性文件通常写数据库连接的信息 username(注意一个问题, 属性文件中不要单独写一个username) password url driverClass --> <property resource="属性文件所在src下的位置" /> <!-- 或者直接定义属性值 --> <properties> <property name="jdbc.username" value="test" /> <property name="jdbc.password" value="test" /> <property name="jdbc.driverClassName" value="oracle.jdbc.OracleDriver" /> <property name="jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl" /> </properties> <!-- 为实体类定义一个别名, 如果不定义别名, 在映射文件中就要写这个实体类的全路径名 --> <typeAliases> <!-- 这个写法取的别名是随意的, 可以自己任意定义 --> <!-- <typeAlias type="类名的全路径名" alias="别名"></typeAlias> --> <!-- 如果使用下面这个写法, 就是按照mybatis自己定义的规则, 这个包下的所有类的类名就是别名 --> <package name="com.model"/> <!-- 使用package标签实际是默认扫描model包下的所有的类, 如果在实体类的定义了注解@Alias(value = "..."), 则优先使用注解 --> </typeAliases> <!-- 配置mybatis的运行环境们 --> <environments default="所使用的环境的标签id"> <environment id="default"> <!-- 配置事务管理器的类型 JDBC MANAGED--(托管, 商业服务器上才有的功能, Tomcat没有) --> <transactionManager type="JDBC" /> <!-- POOLED(基于连接池的数据源) UNPOOLED(使用普通的数据库连接) JNDI(使用应用服务器上的JNDI连接配置数据源, 很少使用) --> <dataSource type="POOLED"> <property name="username" value="${属性文件中配置的信息}"></property> <property name="password" value="${属性文件中配置的信息}"></property> <property name="url" value="${属性文件中配置的信息}"></property> <property name="driver" value="${属性文件中配置的信息}"></property> </dataSource> </envirment> </environments> <mappers> <!-- 挨个写明每个映射文件所在的位置 --> <mapper resource="src下mapper映射文件的全路径名"> <!-- 写明每个映射文件所对应的接口的限定名, package引入的文件一定是接口, 所以如果使用这种方式, 必须是使用接口对应映射文件的方式 --> <package name="接口所在的包" /> </mappers> </configuration>
实例:
<?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> <package name="model"/> </typeAliases> <environments default="hanqi"> <environment id="hanqi"> <!-- JDBC: MANAGED:托管 --> <transactionManager type="JDBC" /> <!-- 配置数据库源 POOLED: 连接池 UNPOOLED: 非连接池 JNDI: 使用应用服务器上的数据库连接 --> <dataSource type="POOLED"> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="url" value="${jdbc.url}"/> <property name="driver" value="${jdbc.driver}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/UserMapper.xml" /> </mappers> </configuration>
新建每个实体类的映射文件...Mapper.xml:
<!-- 定义每个实体类的映射文件 -->
<mapper namespace="唯一的id / 接口的全路径名">
<select id="被调用的id(唯一) / 需要执行的方法名"></select>
<insert></insert>
<update></update>
<delete></delete>
</mapper>
resultType: 类的全路径名 / 定义好的别名
resultMap: 指定返回结果的集合
parameterType: 指的是, 进行查询的时候所需要的参数类型
<?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="UserMapper"> <resultMap type="user" id="UserList"> <result property="id" column="id" /> <result property="uname" column="uname" /> <result property="upassword" column="upassword" /> </resultMap> <select id="selectUser" resultType="user"> select * from p_user </select> <select id="selectOneUser" parameterType="Integer" resultMap="UserList"> select * from p_User u where u.id=#{id} </select> <insert id="insertUser" parameterType="user" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> insert into p_User values(test1.nextval,#{uname},#{upassword}) </insert> <update id="updateUser" parameterType="Map"> update p_User u set u.uname=#{uname},u.upassword=#{upassword} where u.id=#{id} </update> <delete id="deleteUser" parameterType="Map"> delete p_user u where u.id=#{id} </delete> </mapper>
MyBatis工具类:
1, 构建SqlSessionFactory
InputStream in = Resources.getResourceAsStream("总配置文件所在的src下的路径");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
2, 构建SqlSession(注意SqlSession不能以一个class成员变量的身份被返回)
SqlSession ss = ssf.openSession();
3, 直接运行
a: 直接运行映射文件中的sql语句
ss.select...
ss.insert...
ss.update...
ss.delete...
b: 使用接口映射配置文件
ss.getMapper(接口类名.class);
调用接口的方法
package util; import java.io.IOException; import java.io.InputStream; 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 sqlSessionFactory; private static SqlSession sqlSession; public static void main(String[] args) { System.out.println(getSqlSession()); } public static void getSqlSessionFactory(){ String path="mybatis-config.xml"; try { InputStream in=Resources.getResourceAsStream(path); sqlSessionFactory =new SqlSessionFactoryBuilder().build(in); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static SqlSession getSqlSession(){ SqlSession sqlSession=null; if(sqlSession==null){ getSqlSessionFactory(); } sqlSession=sqlSessionFactory.openSession(); return sqlSession; } public static void destory(SqlSession sqlSession){ sqlSession.commit(); sqlSession.close(); } }
创建用户实体类,属性和表的列明相对应:
package model; import org.apache.ibatis.type.Alias; //别名 @Alias("user") public class User { private Integer id; private String uname; private String upassword; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpassword() { return upassword; } public void setUpassword(String upassword) { this.upassword = upassword; } @Override public String toString() { return "User [id=" + id + ", uname=" + uname + ", upassword=" + upassword + "]"; } }
测试:
package test; import static org.junit.Assert.*; import java.util.Date; 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 model.User; import util.MyBatisUtil; public class JUTest { private SqlSession ss; @Before public void setUp() throws Exception { ss = MyBatisUtil.getSqlSession(); } @After public void tearDown() throws Exception { MyBatisUtil.destory(ss); } @Test public void test() { //查询 //List<User> list=ss.selectList("UserMapper.selectUser"); //指定查询 //List<User> list1=ss.selectList("UserMapper.selectOneUser",1); //增加 User u=new User(); u.setId(null); u.setUname("ccc"); u.setUpassword("ccc"); int a = ss.insert("UserMapper.insertUser", u); //修改 /*Map<String, Object> map = new HashMap<String, Object>(); map.put("id", 10); map.put("uname", "233"); map.put("upassword", "123"); int a = ss.update("UserMapper.updateUser", map);*/ //删除 /*Map<String, Integer> map = new HashMap<String,Integer>(); map.put("id",113); int a=ss.delete("UserMapper.deleteUser", map);*/ System.out.println(a); } }
p_user表:
prompt PL/SQL Developer import file prompt Created on 2017年9月19日 by Administrator set feedback off set define off prompt Dropping P_USER... drop table P_USER cascade constraints; prompt Creating P_USER... create table P_USER ( id NUMBER not null, uname ) not null, upassword ) not null ) tablespace SYSTEM pctfree pctused initrans maxtrans storage ( initial 64K next 1M minextents maxextents unlimited ); alter table P_USER add constraint PK_USER primary key (ID) using index tablespace SYSTEM pctfree initrans maxtrans storage ( initial 64K next 1M minextents maxextents unlimited ); prompt Disabling triggers for P_USER... alter table P_USER disable all triggers; prompt Loading P_USER... insert into P_USER (id, uname, upassword) , '); insert into P_USER (id, uname, upassword) , '); insert into P_USER (id, uname, upassword) , '); insert into P_USER (id, uname, upassword) , 'ccc', 'ccc'); insert into P_USER (id, uname, upassword) , '); insert into P_USER (id, uname, upassword) , '); insert into P_USER (id, uname, upassword) , '); insert into P_USER (id, uname, upassword) , '); insert into P_USER (id, uname, upassword) , '); insert into P_USER (id, uname, upassword) , '); insert into P_USER (id, uname, upassword) , '); insert into P_USER (id, uname, upassword) , '); insert into P_USER (id, uname, upassword) , '); insert into P_USER (id, uname, upassword) , 'ccc', 'ccc'); insert into P_USER (id, uname, upassword) , 'ccc', 'ccc'); commit; prompt records loaded prompt Enabling triggers for P_USER... alter table P_USER enable all triggers; set feedback on set define on prompt Done.
MyBatis框架(一)的更多相关文章
- Mybatis框架的多对一关联关系(六)
一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...
- Spring+SpringMvc+Mybatis框架集成搭建教程
一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
- Hibernate框架与Mybatis框架的对比
学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...
- 初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)
此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我 ...
- Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询
在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...
- SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- Spring3.0 与 MyBatis框架 整合小实例
本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...
- 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...
- 详解Java的MyBatis框架中SQL语句映射部分的编写
这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...
随机推荐
- MFC基础窗口创建,CWinApp、CFrameWnd
1.CWinApp(包括了这个类的导出类):代表了我们的程序.封装了消息循环等. 2.CFrameWnd:代表了程序的框架窗口.封装了窗口的注册.创建.显示.刷新.等等窗口操作. 3.Win32中.一 ...
- Orleans的集群构建
Orleans的集群构建 这是Orleans系列文章中的一篇.首篇文章在此 听闻一周前,微软公布了.net core2.0,以及各种各样的其他core2.0.大家都很兴奋.微妈的诚意真是满满的.这次开 ...
- shell学习笔记(一)
1.第一行必须以#!/bin/bash #!表示脚本使用后面的解释器解释执行 2.echo 打印输出 例如 echo "hello world" > aa.txt 3.接 ...
- elasticsearch映射
前面讲到,无论是关系型数据库还是非关系型数据库,乃至elasticsearch这种事实上承担着一定储存作用的搜索引擎,数据类型都是非常重要而基础的概念.但elasticsearch与其它承担着数据存储 ...
- latex 插图排版
LaTeX的图片插入及排版 LaTeX中一般只直接支持插入eps(Encapsulated PostScript)格式的图形文件, 因此在图片插入latex文档之前应先设法得到图片的eps格式的文 ...
- poj3928 la4329 pingpong
Description N(3<=N<=20000) ping pong players live along a west-east street(consider the street ...
- Spring详解(一)------概述
本系列教程我们将对 Spring 进行详解的介绍,相信你在看完后一定能够有所收获. 1.什么是 Spring ? Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开 ...
- JSP慕课网之Session
会话保存在服务器的内存里. sessionId可以通过进入http://localhost:8888/进入Tomcat的Manager App进行查看,点击项目的sessions可以看到session ...
- Java的HashMap实现原理整理总结
通过Debug 探寻Java-HashMap 实现原理: 一个简单的例子,代码如下, 测试方法 main: public static void main(String[] args) { KeyOb ...
- 关于wamp服务器文件的配置
有的前端朋友想在手机端看PC端开发的html5页面,这时候会在本地PC下载一个wamp,这时候在PC端输入电脑的IP地址或者是直接输入localhost,可以访问www目录下的文件(开发项目必须放置在 ...