文档章节

MyBatis初探一

AAASSSSddd
 AAASSSSddd
发布于 2016/04/02 22:05
字数 1217
阅读 98
收藏 5

一、MyBatis介绍

mybatis(持久层框架3.2.6 or 3.2.7)简单执行流程

>1.SqlMapConfig.xml(全局配置文件),配置数据源,事务和运行环境等

>2.配置映射文件(编写SQL语句):mapper.xml...

>3.SqlSessionFactory(会话工厂)--create--->SqlSession(会话)操作数据库发送SQL语句--->Executor(执行器接口,包含基本执行器和缓存执行器)SqlSession内部通过执行器操作数据库--->MappedStatement(底层封装对象)对SQL语句,输入参数,输出结果类型

参考资料:

http://www.mybatis.org/mybatis-3/zh/index.html
<a href="http://www.mybatis.org/mybatis-3/zh/index.html">mybatis中文参考网站(一些属性定义方式,类型关系,类型映射等)<a>

二、MyBatis知识点

1.mybatis->dao层

2.mybatis->输入映射,输出映射

3.mybatis->动态输出

4.mybatis->关系映射(1-1,1-N,N-N)

5.mybatis->延迟加载

6.mybatis->查询缓存(一级缓存,二级缓存)

7.mybatis->整合Spring

8.mybatis->逆向工程

三、Mybatis初探( 单表实体类增删改查 )

  1. 加入jar:mybatis-3.2.6.jar或者mybatis-3.2.7.jar和日志包(log4j,commons-logging)

  2. 创建数据库表和全局配置文件SqlMapConfig.xml

USE `shop`;

/*Table structure for table `users` */

DROP TABLE IF EXISTS `users`;

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(500) DEFAULT NULL,
  `sex` varchar(500) DEFAULT NULL,
  `birth` date DEFAULT NULL,
  `address` varchar(500) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
#db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/shop?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
<?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>
  <!-- 和Spring整合之后environments不再需要使用 -->
  <environments default="development">
  
    <environment id="development">
      <transactionManager type="JDBC"/><!-- 使用JDBC的事务 -->
      <dataSource type="POOLED"><!-- 连接池 -->
        <property name="driver" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
      </dataSource>
    </environment>
    
  </environments>
  <!-- 加载映射文件 -->
  <mappers>
    <mapper resource="sqlmap/Users.xml"/>
    <mapper resource="mapper/UsersMapper.xml"/>
  </mappers>
</configuration>

3.编写实体JavaBean类和Mapper.xml对应文件

package com.ts.domain;

import java.util.Date;

public class Users {
	
	public Users() {}

	public Users(String name, String sex, Date birth, String address) {
		this.name = name;
		this.sex = sex;
		this.birth = birth;
		this.address = address;
	}

	private int id;
	
	private String name;
	
	private String sex;
	
	private Date birth;
	
	private String address;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public Date getBirth() {
		return birth;
	}

	public void setBirth(Date birth) {
		this.birth = birth;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "Users [id=" + id + ", name=" + name + ", sex=" + sex + ", birth=" + birth + ", address=" + address
				+ "]";
	}
}
<?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">
    
<!-- namespace:命名空间 -->
<mapper namespace="Users">
	
	<!-- MappedStatement的ID -->
	<!--#{}:占位符 接收输入的参数
	
		parameterType:输入参数类型
		#{id}:参数名称是id
		
		resultType:输出结果类型
		返回一个JavaBean
	-->
	<select id="findUserById" parameterType="int" resultType="com.ts.domain.Users">
		select * from Users where id = #{id}
	</select>
	
	<!-- 
		${}:拼接符,拼接SQL字符串,${}中只能使用value,会有SQL注入问题,不建议使用
	 -->
	<select id="findUsersByName" parameterType="String" resultType="com.ts.domain.Users">
		select * from Users where name like '%${value}%'
	</select>
	
	<!-- 添加用户:返回自增主键值 ,只适用自增主键
		 keyProperty="id"返回映射Java属性
		 order="AFTER"执行顺序
		 resultType="int" 返回类型
		 
		 uuid:
		 <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
			select uuid
		</selectKey> 
	-->
	<insert id="insertUser" parameterType="com.ts.domain.Users">
		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			select LAST_INSERT_ID()
		</selectKey> 
		insert into Users(name,birth,sex,address) values(#{name},#{birth},#{sex},#{address})
	</insert>
	
	<!-- 删除用户 -->
	<delete id="deleteUser" parameterType="int">
		delete from Users where id = #{id}
	</delete>
	
	<!-- 更新用户 -->
	<update id="updateUser" parameterType="com.ts.domain.Users">
		update Users set name = #{name},sex = #{birth},birth = #{birth},address =#{address}  where id = #{id}
	</update>

</mapper>

4.测试增删改查代码

public class IMybatis {

	/**
	 * 需求:
	 * 根据ID查询单个用户
	 * 根据用户名称模糊查询用户
	 * 添加用户
	 * 删除用户
	 * 更新用户
	 * @throws Exception 
	 */
	private static SqlSessionFactory sqlSessionFactory;

	@Before
	public void before() throws IOException{
		//通过输入流读取全局配置信息创建工厂
		String resource = "SqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

	}
	
	/**
	 *  根据ID查询单个用户
	 * @throws Exception
	 */
	@Test
	public void findUserById() throws Exception{
		//获取SqlSession会话
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//查询一条记录,命名空间 + id
		Users user = sqlSession.selectOne("Users.findUserById",1);
		System.out.println(user);
		//释放资源连接
		sqlSession.close();
	}


	/**
	 * 根据用户名称模糊查询多条用户
	 * @throws Exception
	 */
	@Test
	public void findUsersByName() throws Exception{
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//查询多条记录
		List<Users> users = sqlSession.selectList("Users.findUsersByName","晓明");
		System.out.println( users.size() );
		sqlSession.close();
	}
	
	/**
	 * 添加用户
	 * @throws Exception
	 */
	@Test
	public void insertUser() throws Exception{
		SqlSession sqlSession = sqlSessionFactory.openSession();
		Users user = new Users("慧锦AAA", "女", new Date(), "北京");
		sqlSession.insert("Users.insertUser",user);
		sqlSession.commit();				
		//MySQL执行insert提交之前自动生成一个自增主键
		//通过MySQL函数可以获取刚插入记录的自增主键:LAST_INSERT_ID()
		System.out.println(user.getId());	//获取主键
		sqlSession.close();
	}
	
	
	/**
	 * 根据ID删除用户
	 * @throws Exception
	 */
	@Test
	public void deletetUser() throws Exception{
		SqlSession sqlSession = sqlSessionFactory.openSession();
		sqlSession.delete("Users.deleteUser",6);
		sqlSession.commit();			
		sqlSession.close();
	}
	
	/**
	 * 更新用户
	 * @throws Exception
	 */
	@Test
	public void updateUser() throws Exception{
		SqlSession sqlSession = sqlSessionFactory.openSession();
		Users user = new Users();
		user.setId(5);
		user.setName("名字");
		sqlSession.update("Users.updateUser", user);
		sqlSession.commit();
		sqlSession.close();
	}


© 著作权归作者所有

AAASSSSddd
粉丝 19
博文 51
码字总数 48587
作品 0
杭州
程序员
私信 提问
MyBatis初探二

一、Mybatis 的 Dao 层两种开发方式 1、原始Dao开发模式( 自己手动实现Dao层接口和实现类 ) 》 实现思路:编写Dao接口和实现类,在Dao接口中注入单例的SqlSessionFactory,通过SqlSessionFac...

AAASSSSddd
2016/04/02
80
5
MyBatis初探四

一、 IF 判断 需要额外定义一个查询类来封装查询对象( getXX setXX )。 编写mapper.xml文件 测试 package com.ts.dao.vo; import com.ts.domain.Users;/** * 复杂条件查询VO * @author TS *...

AAASSSSddd
2016/04/03
138
0
MyBatis初探三

一、输入类型( parameterType ) 简单类型( 基本数据类型 ) HashMap 单个JavaBean( 自定义JavaBean类型 ) 传入JavaBean的包装类型( 用处:比如说用户的复杂查询( 关联查询 ),需要传入用户信息...

AAASSSSddd
2016/04/03
40
0
DreamWork/mgfinal

mgfinal 基于mgwork(servlet3.0多实例非单例)做mvc框架,mybatis做orm框架,mgioc做单例容器的mgfinal框架,mgutil做日志及常用工具方法管理,致力于打造实用的java后台底层。 适用于中小型...

DreamWork
2016/05/07
0
0
【HTML5初探之Geolocation API】让我们获取女神的地址

导航 【初探HTML5之使用新标签布局】用html5布局我的博客页! 【HTML5初探之form标签】解放表单验证、增加文件上传、集成拖放 【HTML5初探之绘制图像(上)】看我canvas元素引领下一代web页面...

范大脚脚
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
841
11
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
15
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部