Mybatis原始DAO开发方式和Mapper代理开发方式

1 Mybatis开发基本流程

(1)配置SqlMapConfig.xml,设置数据连接信息等

(2)编写数据库表对应的实体类

(3)编写映射文件mapper.xml,这里主要是SQL语句

(4)创建SqlSessionFactory对象

(5)获取SqlSession对象,进行增删改查操作

(6)提交事务,关闭SqlSession

2 Mybatis开发准备环境

创建一个名为mybatis的maven项目,通过pom引入相关jar包

<dependencies>
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.2.1</version>
	</dependency>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.34</version>
	</dependency>
</dependencies>

在mybatis数据库中创建tb_user表

CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `name` varchar(10) NOT NULL COMMENT '用户姓名',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `gender` char(1) DEFAULT NULL COMMENT '性别,F-男,M-女',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

SqlMapConfig.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>
	<!-- 和Spring整合后environment配置都会被干掉 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理,目前由mybatis来管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池,目前由mybatis来管理 -->
			<dataSource type="POOLED">
				<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="root" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<!-- 原始DAO开发方式的映射文件 -->
		<mapper resource="dao/userMapper.xml" />
		<!-- 原始Mapper代理开发方式的映射文件 -->
		<mapper resource="mapper/userMapper.xml" />
	</mappers>
</configuration>

编写tb_user对应的实体类UserModel

package lzgsea.mybatis.model;

import java.util.Date;

public class UserModel {
	private Integer id; // 用户id
	private String name; // 用户姓名
	private Date birthday; // 生日
	private String gender; // 性别

	public Integer getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	@Override
	public String toString() {
		return "UserModel [id=" + id + ", name=" + name + ", birthday=" + birthday + ", gender=" + gender + "]";
	}
}

3 原始DAO开发方式

编写映射文件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="userMapper">

	<!-- 添加用户 -->
	<insert id="insert" parameterType="lzgsea.mybatis.model.UserModel"
		useGeneratedKeys="true" keyProperty="id" keyColumn="id">
		insert into tb_user
		(name,birthday,gender) values (#{name},#{birthday},#{gender})
	</insert>

	<!-- 查询用户 -->
	<select id="getUserById" parameterType="int"
		resultType="lzgsea.mybatis.model.UserModel">
		select * from tb_user where id = #{id}
	</select>

	<!-- 更新用户 -->
	<update id="update" parameterType="lzgsea.mybatis.model.UserModel">
		update tb_user set name =
		#{name}, birthday =
		#{birthday}, gender = #{gender} where id = #{id}
	</update>

	<!-- 删除用户 -->
	<delete id="delete" parameterType="int">
		delete from tb_user where id =
		#{id}
	</delete>

</mapper>

编写UserDao接口以及它的实现类UserDaoImpl

package lzgsea.mybatis.dao;

import lzgsea.mybatis.model.UserModel;

public interface UserDao {

	void insert(UserModel user);

	UserModel getUserById(int id);

	void update(UserModel user);

	void delete(int id);

}
package lzgsea.mybatis.dao.impl;

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;

import lzgsea.mybatis.dao.UserDao;
import lzgsea.mybatis.model.UserModel;

public class UserDaoImpl implements UserDao {

	private SqlSessionFactory sqlSessionFactory;

	public UserDaoImpl() {
		try {
			String resource = "SqlMapConfig.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void insert(UserModel user) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		sqlSession.insert("userMapper.insert", user);
		sqlSession.commit();
		sqlSession.close();
	}

	public UserModel getUserById(int id) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		UserModel user = sqlSession.selectOne("userMapper.getUserById", id);
		sqlSession.close();
		return user;
	}

	public void update(UserModel user) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		sqlSession.update("userMapper.update", user);
		sqlSession.commit();
		sqlSession.close();
	}

	public void delete(int id) {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		sqlSession.delete("userMapper.delete", id);
		sqlSession.commit();
		sqlSession.close();
	}

}

测试:

public static void main(String[] args) throws IOException {
	UserDao userDao = new UserDaoImpl();
	UserModel user = new UserModel();
	user.setName("lzgsea");
	user.setGender("F");
	user.setBirthday(new Date());
	userDao.insert(user);
	
	System.out.println(userDao.getUserById(user.getId()));
}

4 Mapper代理开发方式

编写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="lzgsea.mybatis.mapper.UserMapper">

	<!-- 添加用户 -->
	<insert id="insert" parameterType="lzgsea.mybatis.model.UserModel"
		useGeneratedKeys="true" keyProperty="id" keyColumn="id">
		insert into tb_user
		(name,birthday,gender) values (#{name},#{birthday},#{gender})
	</insert>

	<!-- 查询用户 -->
	<select id="getUserById" parameterType="int"
		resultType="lzgsea.mybatis.model.UserModel">
		select * from tb_user where id = #{id}
	</select>

	<!-- 更新用户 -->
	<update id="update" parameterType="lzgsea.mybatis.model.UserModel">
		update tb_user set name =
		#{name}, birthday =
		#{birthday}, gender = #{gender} where id = #{id}
	</update>

	<!-- 删除用户 -->
	<delete id="delete" parameterType="int">
		delete from tb_user where id =
		#{id}
	</delete>

</mapper>
编写UserMapper接口
package lzgsea.mybatis.mapper;

import lzgsea.mybatis.model.UserModel;

public interface UserMapper {

	void insert(UserModel user);

	UserModel getUserById(int id);

	void update(UserModel user);

	void delete(int id);

}

测试:

public static void main(String[] args) throws IOException {
	String resource = "SqlMapConfig.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	SqlSession sqlSession = sqlSessionFactory.openSession();

	UserModel user = new UserModel();
	user.setName("lzgsea");
	user.setGender("F");
	user.setBirthday(new Date());

	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
	userMapper.insert(user);

	System.out.println(userMapper.getUserById(user.getId()));

	sqlSession.commit();
	sqlSession.close();
}

总结:

Mapper代理开发方式,映射文件userMapper.xml的namespace属性的值为UserMapper接口的全路径

Mapper代理开发方式,UserMapper接口通过sqlSession.getMapper(Class<T> type)方法获取实例化对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值