MyBatis初体验

最近玩的有点厉害,需要检讨一下自己了。MyBatis的学习开始了,本篇文章介绍使用MyBatis完成一个基本表的CRUD操作。先来陈述一下开发步骤:搭建好开发环境后,接下来的步骤就是固定的了。我大致的总结了一下如下:

MyBatis开发指南
第一步创建核心配置文件
第二步创建数据库表对应的实体类
第三步创建Mapper配置文件,再加入核心配置文件
第四步加载核心配置文件,创建SqlSessionFactory,使用工厂产生SqlSession

第五步使用MyBatis的各种方法完成增删查改操作

首先核心配置文件:

<?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>
	<!-- 这里使用开发模式,其他的模式如work模式 -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC">
				<property name="" value="" />
			</transactionManager>
			<!-- 不使用连接池 -->
			<dataSource type="UNPOOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
</configuration>

然后是实体类:

package edu.ctgu.mybatis.entity;

public class User {
	private int id;
	private String name;
	private int age;
	
	public User(){
		
	}
	public User(String name, int age) {
		this.name = name;
		this.age = age;
	}
	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 int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
	
	
}

接下来是Mapper配置文件:

<?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">
	<select id="getUser"  parameterType="int" resultType="edu.ctgu.mybatis.entity.User">
			<!-- #{}是OGNL表达式 -->
			SELECT * FROM user WHERE id = #{id}
	</select>
</mapper>

Mapper配置文件搞好了,然后在核心配置文件中将其包含进去,需要在核心配置文件中增加如下:

<mappers>
	<mapper resource="edu/ctgu/mybatis/config/UserMapper.xml" />
</mappers>

一个简单的main函数:

// 测试一,测试mybatis是否可用
public class Main {
		public static void main(String[] args) {
			String resource = "edu/ctgu/mybatis/config/Configuration.xml";
			// 使用类加载器来读取文件
			InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
			// 或者这样:读取配置文件获取到数据库的连接信息
			// Reader reader = Resources.getResourceAsReader(resource);
			
			SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
			SqlSession session = factory.openSession();
			
			// 在UserMappers没有指定name space的话,就可以直接写id名称getUser
			String statement = "userMapper.getUser";
			User user = session.selectOne(statement , 2);
			System.out.println(user);
		}
}

好了,上面就是一个完整的开发步骤了,我们顺便将CRUD四个操作都过一遍,先需要给Mapper配置文件增加一点内容,修改好的配置文件如下:

<?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">
	<select id="getUser"  parameterType="int" resultType="edu.ctgu.mybatis.entity.User">
			<!-- #{}是OGNL表达式 -->
			SELECT * FROM user WHERE id = #{id}
	</select>
		
	<update id="updateUser" parameterType="edu.ctgu.mybatis.entity.User">
			UPDATE  user SET name = #{name},age = #{age} WHERE id = #{id}
	</update>
	
	<insert id="addUser" parameterType="edu.ctgu.mybatis.entity.User">
			INSERT INTO user(name,age)  VALUES(#{name},#{age})
	</insert>
	
	<delete id="deleteUser" parameterType="int">
			DELETE FROM user WHERE id = #{id} 
	</delete>
	
	 <select id="getAllUsers" resultType="edu.ctgu.mybatis.entity.User">
	 		SELECT * FROM user
	 </select>
</mapper>


为了开发的方便,我们将生成SqlSession的工作放在一个Util类中完成:

public class MapperUtils {
	public static SqlSession getSqlSession(){
		String resource = "edu/ctgu/mybatis/config/Configuration.xml";
		// 使用类加载器来读取文件
		InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
		
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		SqlSession session = factory.openSession();
		return session;
	}
}

测试类如下:

public class TestCRUD {
	@Test
	public void testInsert(){
		SqlSession session = MapperUtils.getSqlSession();
		User user = new User("Tom", 21);
		String statement = "userMapper.addUser";
		session.insert(statement, user);
		session.commit();
	}
	
	@Test 
	public void testUpdate(){
		SqlSession session = MapperUtils.getSqlSession();
		User user = new User("Tom", 22);
		user.setId(4);
		String statement = "userMapper.updateUser";
		int result = session.update(statement, user);
		session.commit();
		System.out.println(result);
	}
	
	@Test
	public void testDelete(){
		SqlSession session = MapperUtils.getSqlSession();
		String statement = "userMapper.deleteUser";
		int result = session.delete(statement, 4);
		session.commit();
		System.out.println(result);
	}
	
	@Test
	public void testGetAllUsers(){
		SqlSession session = MapperUtils.getSqlSession();
		String statement = "userMapper.getAllUsers";
		List<User> result = session.selectList(statement);
		session.commit();
		session.close();
		System.out.println(result);
	}
}	

这里需要注意一个知识点:

 * 在MyBatis中执行事务的方式(执行完毕某个操作成功后以后不进行数据回滚)
 * 第一种方式:直接在openSession方法中添加参数true,自动提交的方式
 * 第二种方式:在完成整个逻辑操作后,添加代码session.commit();,完成事务的手动提交

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值