2. MyBatis基于配置文件的CRUD

上一篇做了一个 MyBatis 的简单的入门, 这一节我们深入一下, 主要是学习如何对数据表做 CRUD操作.

上一篇简单的做了一个查询,这一篇, 咱们按照 查, 增, 改, 删来讲.

一: 查

1. 查询一个 Person 对象.

这个简单的查询一个对象在上一篇中已经说了, 这里就不说了.

2. 查询一个 属性值.

为了获取 SqlSession 对象方便, 我把获取 SqlSession 的操作抽象成一个工具类.

public class MyBatisUtil {

	private MyBatisUtil(){}

	public static SqlSession getSqlSession() {

		InputStream is = MyBatisUtil.class.getClassLoader()
					.getResourceAsStream("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
		                        .build(is);
		SqlSession session = sessionFactory.openSession();
		return session;
	}

}

SQL 语句主要都写在 PersonMapper.xml 中, 然后调用对应的 id 属性值.

PersonMapper.xml 中增加一个查询

<select id="getValue" parameterType="int" resultType="String">
	SELECT name FROM person WHERE id=#{id}
</select>

因为我们查询的姓名是一个 String 类型, 所以我们的 resultType值为String.

调用代码为:

        @Test
	public void testGetValue(){

		SqlSession session = MyBatisUtil.getSqlSession();
		String statement = "com.mybatis.entities.PersonMapper.getValue";
		String str = session.selectOne(statement, 1);
		System.out.println(str);

	}

一定要记住 com.mybatis.entities.PersonMapper.getValue 加粗的文字, 为<select>标签的 id 属性值.

是不是 So Easy!

3. 查询一组 Person 对象.

这个就是返回一个集合, 直接上代码, 也很简单

PersonMapper.xml 中增加一个查询

<select id="getPersons"  parameterType="int" resultType="com.mybatis.entities.Person">
	SELECT id, name, age FROM person
</select>

返回值类型就是一个 Person 对象, 而查询是查询所有的.

调用代码:

        @Test
	public void testGetPersons(){

		SqlSession session = MyBatisUtil.getSqlSession();
		String statement = "com.mybatis.entities.PersonMapper.getPersons";
		List<Person> persons = session.selectList(statement);
		persons.forEach(person -> System.out.println(person));

	}

List<Person> persons = session.selectList(statement);

重点是这一个, 不是 selectOne, 而是 selectList, 查询一组对象. 没有给它传参数.

4. 按条件查询或者模糊查询一组对象.

先构造一个查询条件类 PersonCondition 如下:

package com.mybatis.util;

public class PersonCondition {

	private String name;
	private Integer minAge;
	private Integer maxAge;

	public PersonCondition() {
		super();
	}

	public PersonCondition(String name, Integer minAge, Integer maxAge) {
		super();
		this.name = name;
		this.minAge = minAge;
		this.maxAge = maxAge;
	}

	public String getName() {
		return name;
	}

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

	public Integer getMinAge() {
		return minAge;
	}

	public void setMinAge(Integer minAge) {
		this.minAge = minAge;
	}

	public Integer getMaxAge() {
		return maxAge;
	}

	public void setMaxAge(Integer maxAge) {
		this.maxAge = maxAge;
	}

	@Override
	public String toString() {
		return "PersonCondition [name=" + name + ", minAge=" + minAge + ", maxAge=" + maxAge + "]";
	}

}

然后

PersonMapper.xml 内容如下:

	<select id="getPersonsByCondition"  
		parameterType="com.mybatis.util.PersonCondition" 
		resultType="com.mybatis.entities.Person">
		<!-- 因为里边有大于号小于号, 所用用 <![CDATA[]]> 括起来-->
		<![CDATA[
			SELECT id, name, age FROM person 
			WHERE name like #{name} 
			AND age > #{minAge} 
			AND age < #{maxAge}
		]]>
	</select>

这里直接用 #{name} 来获取 PersonCondition 类中的name属性值.

调用代码如下:

	@Test
	public void testGetPersonsByCondition(){

		// 构造一个查询条件类, name 要用 %% 括起来, mysql的语法.
		PersonCondition condition = new PersonCondition("%k%", 10, 20);

		SqlSession session = MyBatisUtil.getSqlSession();
		String statement = 
		    "com.mybatis.entities.PersonMapper.getPersonsByCondition";
		// 把查询条件传进去
		List<Person> persons = session.selectList(statement, condition);
		persons.forEach(person -> System.out.println(person));

	}

二: 增

利用 <insert> 标签来插入数据.

PersonMapper.xml 内容如下:

	<insert id="insertPerson" parameterType="com.mybatis.entities.Person">
		INSERT INTO person(name, age) VALUES(#{name}, #{age})
	</insert>

调用代码如下:

	@Test
	public void testInsertPerson(){

		SqlSession session = MyBatisUtil.getSqlSession();
		String statement = "com.mybatis.entities.PersonMapper.insertPerson";
		session.insert(statement, new Person(null, "AAA", 20));
		session.commit();

	}

调用 session.insert(); 来完成插入.

注意: MyBatis 的 session 默认是不自动提交的.

三: 改

利用<update>标签和 session.update()方法完成.

PersonMapper.xml 内容如下:

	<update id="updatePerson" parameterType="com.mybatis.entities.Person">
		UPDATE person SET name=#{name}, age=#{age} WHERE id=#{id}
	</update>

调用代码如下:

	@Test
	public void testUpdatePerson(){

		SqlSession session = MyBatisUtil.getSqlSession();
		String statement = "com.mybatis.entities.PersonMapper.updatePerson";
		// 我们把 id 为 5 的人的姓名改为 BBB, 年龄改为 20
		session.update(statement, new Person(5, "BBB", 20));
		session.commit();

	}

四: 删

利用 <delete> 标签, 和 session.delete() 方法完成操作.

PersonMapper.xml

	<delete id="deletePerson" parameterType="int">
	<!-- 
		当传入的参数为 int 类型的时候, 用#{id}获取或者用#{abc} 获取都没问题,
		当时当传入一个对象的时候必须用 #{对象属性}来获取.
	-->
		DELETE FROM person WHERE id=#{abc}
	</delete>

调用代码如下:

	@Test
	public void testDeletePerson(){

		SqlSession session = MyBatisUtil.getSqlSession();
		String statement = "com.mybatis.entities.PersonMapper.deletePerson";
		// 我们把 id 为 5 的人从数据库中删除
		session.delete(statement, 5);
		session.commit();

	}

本篇博文代码点击 http://pan.baidu.com/s/1o7p1CyI 下载.

时间: 12-15

2. MyBatis基于配置文件的CRUD的相关文章

mybatis与spring整合(基于配置文件)(转)

mybatis与spring整合(基于配置文件) 本文主要介绍了如何将mybatis和spring整合在一起使用,本人使用的是mybatis3.05 + spring3.1.0M2 ,使用dbcp作为数据库连接池. 1.编写数据访问接口(UserDao.java) package com.mybatis; publicinterface UserDao { publicint countAll(); } 2.编写数据访问接口映射文件(UserDaoMapper.xml) <?xml versio

mybatis(基于annotation的方法知道就行了)

MyBatisUtil.java UserMapper.java package edu.hhxy.btais.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.SqlSessionFacto

Mybatis主配置文件常见使用讲解

在开发中我们通常将Mybatis中配置文件分两种,主配置文件与和dao对应的映射文件. 其实最后mybatis解析的还是一个主配置文件. 而映射文件会通过我们配置<mappers>属性,或指定扫描路径,将映射文件导入主配置文件,最后一起解析. 下面是主配置文件常见使用讲解: Mybatis中properties文件的引入 properties导入后可以将可能会改变的属性放在单独的文件,例如连接数据时的账号密码等,方便管理, 在mybatis中使用properties标签,如下,resource

MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射

一.MyBatis配置文件概要 MyBatis核心配置文件在初始化时会被引用,在配置文件中定义了一些参数,当然可以完全不需要配置文件,全部通过编码实现,该配置文件主要是是起到解偶的作用.如第一讲中我们用到conf.xml文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN&

详解mybatis映射配置文件

一  mybatis 映射文件结构 mybatis映射配置文件存在如下顶级元素,且这些元素按照如下顺序被定义. cache – 给定命名空间的缓存配置. cache-ref – 其他命名空间缓存配置的引用. resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象. parameterMap – 已废弃!老式风格的参数映射.内联参数是首选,这个元素可能在将来被移除,这里不会记录. sql – 可被其他语句引用的可重用语句块. insert – 映射插入语句 upd

Mybatis基于注解开启使用二级缓存

关于Mybatis的一级缓存和二级缓存的概念以及理解可以参照前面文章的介绍.前文连接:https://www.cnblogs.com/hopeofthevillage/p/11427438.html,上文中二级缓存使用的是xml方式的实现,本文主要是补充一下Mybatis中基于注解的二级缓存的开启使用方法. 1.在Mybatis的配置文件中开启二级缓存 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP

spring Quartz基于配置文件和注解的实现

这里仅仅是做简单的记录怎样实现. 一.基于配置文件的实现 ①编写须要调度的类 package com.study; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; //@Component public class QuartzJob { public QuartzJob(){ System.out.println("Quart

MyBatis主配置文件(转载)

原文地址:http://limingnihao.iteye.com/blog/1060764 其中高亮字体是我的理解. 在定义sqlSessionFactory时需要指定MyBatis主配置文件: Xml代码   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">       <property name="configLocatio

mybatis全局配置文件的总结

mybatis全局配置文件SqlMapConfig.xml中的批量操作 typeAliases,可以批量的定义别名,然后在mapper.xml中的parameterType和resultType中使用 1.1 单个别名的定义 1.2 批量别名的定义 2.mapper加载映射配置 2.1 单个映射文件的配置 2.2 批量映射文件的加载(必须使用mapper代理的方式,满足自动代理的条件,并且mappere.java和mapper.xml的名称相同且在同一个目录下)