Mybatis(一),使用三种方式实现对数据库表的增删改查

目录

(一)基于配置文件方式

(二)基于接口方式,涉及四个文件,核心配置文件、映射文件、测试类和接口类

(三)基于注解方式


      MyBatis实现对数据库表的增删改查主要有三种方式,分别为“基于配置文件方式”、“基于接口方式”和“基于注解方式”,下面主要介绍一下这三种方式是如何实现的。推荐使用接口方式。

(一)基于配置文件方式

        涉及三个文件:核心配置文件,映射文件和测试类。核心配置文件主要是配置与数据库相关的信息和注册映射文件;映射文件中涉及SQL语句;测试类是SQL真正执行的地方。

1.核心配置文件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>
	<environments default="development">
		<environment id="development">
			<!-- 配置事务 -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 配置数据源 -->
			<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="123"/>
			</dataSource>
		</environment>
	</environments>
	<!-- 注册映射文件 -->
	<mappers>
		<mapper resource="mapper/BlogMapper1.xml"/>
	</mappers>
</configuration>

2.映射文件BlogMapper1.xml,放置于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="BlogMapper">
	<!-- 查询 -->
	<select id="selectOne" parameterType="int" resultType="entity.Blog">
		select * from blog where id = #{id}
	</select>
	
	<!-- 插入 --> 
	<insert id="insert" parameterType="entity.Blog">
		INSERT INTO blog(id,title,author_id) VALUES(#{id},#{title},#{author_id})
	</insert>
	
	<!-- 删除 -->
	<delete id="delete" parameterType="int">
		delete from blog where id = #{id}
	</delete>
	
	<!-- 更新 -->
	<update id="update" parameterType="entity.Blog">
		update blog set title = #{title} where id = #{id}
	</update>
</mapper>

3.测试类test1.java

package test;

import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.mysql.jdbc.Blob;

import entity.Blog;

/**
 * 通过配置文件实现对blog表的增删改查
 * @author baka
 *
 */
public class test1 {

	public static void main(String[] args) {
		//1.获取配置文件名
		String resource = "SqlMapConfig.xml";
		
		//2.得到数据源
		InputStream is = test1.class.getClassLoader().getResourceAsStream(resource);
		
		//3.提供连接,建立工厂
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		
		//4.得到真正的连接
		SqlSession session = factory.openSession();
		
		//5.执行SQL语句
		
		//查询
		String statement = "BlogMapper.selectOne";
		Blog blog = session.selectOne(statement, 2);
		System.out.println(blog);
		
		//插入
		String statement2 = "BlogMapper.insert";
		Blog blog2 = new Blog(8, "wawa", 1);
		session.insert(statement2, blog2);
		
		//修改
		String statement3 = "BlogMapper.update";
		Blog blog3 = new Blog(8, "wawahh", 2);
		session.update(statement3, blog3);
		
		//删除
		String statement4 = "BlogMapper.delete";
		session.update(statement4, 8);
		
		//6、提交事务,关闭连接
		session.commit();
		session.close();
	}
}

(二)基于接口方式,涉及四个文件,核心配置文件、映射文件、测试类和接口类

1.核心配置文件

<mapper resource="mapper/BlogMapper2.xml"/>

2.接口类BlogDao2.java

package dao;

import java.util.List;

import entity.Blog;

public interface BlogDao2 {
	public Blog selectOne(int id);
	public int insert(Blog blog);
	public int delete(int id);
	public int update(Blog blog);
}

3.映射文件BlogMapper2.xml,使用的是上面的映射文件,但有两点需要注意

(1)命名空间必须是接口所在的位置

<mapper namespace="dao.BlogDao2">

我的接口类是“BlogDao.java”,位于"dao"包下

(2)命名空间中的id必须和接口中的方法同名

(3)完整代码

<?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="dao.BlogDao2">
	<!-- 查询 -->
	<select id="selectOne" parameterType="int" resultType="entity.Blog">
		select * from blog where id = #{id}
	</select>
	
	<!-- 插入 --> 
	<insert id="insert" parameterType="entity.Blog">
		INSERT INTO blog(id,title,author_id) VALUES(#{id},#{title},#{author_id})
	</insert>
	
	<!-- 删除 -->
	<delete id="delete" parameterType="int">
		delete from blog where id = #{id}
	</delete>
	
	<!-- 更新 -->
	<update id="update" parameterType="entity.Blog">
		update blog set title = #{title} where id = #{id}
	</update>
</mapper>

4.测试类test2.java

package test;

import java.io.InputStream;
import java.util.List;

import javax.naming.spi.ObjectFactory;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import dao.BlogDao2;
import entity.Blog;

/**
 * 基于接口方式实现blog表的增删改查
 * @author baka
 *
 */
public class test2 {
	public static void main(String[] args) {
		//1.获得配置文件名
		String resource = "SqlMapConfig.xml";
		
		//2.获得数据流
		InputStream is = test2.class.getClassLoader().getResourceAsStream(resource);
		
		//3.提供连接,建立工厂
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		
		//4.获得真正的连接
		SqlSession session = factory.openSession();
		
		//5.实例化接口
		BlogDao2 blogDao = session.getMapper(BlogDao2.class);
		
		//6.执行SQL语句
		
		//查询
		Blog blog = blogDao.selectOne(2);
		System.out.println(blog);
		
		//插入
		Blog blog2 = new Blog(9, "xxx", 4);
		blogDao.insert(blog2);
		
		//修改
		Blog blog3 = new Blog(9, "xxxL", 4);
		blogDao.update(blog3);
		
		//删除
		blogDao.delete(9);
		
		//7.提交事务,关闭连接
		session.commit();
		session.close();
	}
}

(三)基于注解方式

涉及三个文件,核心配置文件,接口类和测试类,没有映射文件,SQL语句注解写在接口方法中

1.核心配置文件

<mapper class="dao.BlogDao3"/>

2.接口类BlogDao3.java

package dao;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import entity.Blog;

/**
 * 注解方式
 * @author baka
 *
 */

public interface BlogDao3 {
	@Select("select * from blog where id = #{id}")
	public Blog selectOne(int id);
	
	@Insert("INSERT INTO blog(id,title,author_id) VALUES(#{id},#{title},#{author_id})")
	public int insert(Blog blog);
	
	@Delete("delete from blog where id = #{id}")
	public int delete(int id);
	
	@Update("update blog set title = #{title} where id = #{id}")
	public int update(Blog blog);
}

3.测试类test3.java

package test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import dao.BlogDao2;
import dao.BlogDao3;
import entity.Blog;

/**
 * 基于注解方式实现对blog表的增删改查
 * 
 * @author baka
 *
 */
public class test3 {

	public static void main(String[] args) throws IOException {
		// 1.获得配置文件名
		String resource = "SqlMapConfig.xml";

		// 2.获得数据流
		InputStream is = test3.class.getClassLoader().getResourceAsStream(resource);

		// 3.提供连接,建立工厂
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

		// 4.获得真正的连接
		SqlSession session = factory.openSession();

		// 5.实例化接口
		BlogDao3 blogDao = session.getMapper(BlogDao3.class);

		// 6.执行SQL语句
		
		//查询
		Blog blog = blogDao.selectOne(1);
		System.out.println(blog);
		
		//增加
		Blog blog1 = new Blog(9, "xxx", 4);
		blogDao.insert(blog1);
		
		//修改
		Blog blog3 = new Blog(9, "xxxL", 4);
		blogDao.update(blog3);
		
		//删除
		blogDao.delete(9);
		
		// 7.提交事务,关闭连接
		session.commit();
		session.close();
	}

}

项目分为两个工程domain和manager,工程结构如下图所示,其中domain是Maven java工程主要完成对数据库的操作,manager是Maven Web工程,完成web访问 SQL脚本 /* Navicat MySQL Data Transfer Source Server : MySQL Source Server Version : 50022 Source Host : 127.0.0.1:3306 Source Database : zhaochao Target Server Type : MYSQL Target Server Version : 50022 File Encoding : 65001 Date: 2014-09-18 20:16:10 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` int(11) NOT NULL auto_increment, `user_name` varchar(250) default NULL, `user_passwd` varchar(250) default NULL, `user_email` varchar(250) default NULL, `user_type` int(11) default NULL, `create_time` datetime default NULL, `update_time` datetime default NULL, PRIMARY KEY (`id`), KEY `FK_Reference_1` (`user_type`), CONSTRAINT `FK_Reference_1` FOREIGN KEY (`user_type`) REFERENCES `t_user_type` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of t_user -- ---------------------------- INSERT INTO `t_user` VALUES ('1', 'admin', 'admin', 'admin@qq.com', '1', '2014-09-18 14:26:26', '2014-09-18 14:26:56'); INSERT INTO `t_user` VALUES ('2', 'a', 'a', 'a@qq.com', '1', '2014-09-15 17:15:53', '2014-09-18 19:59:09'); INSERT INTO `t_user` VALUES ('5', 'b', 'b', 'b@qq.com', '1', '2014-09-18 20:01:06', '2014-09-18 20:04:38'); -- ---------------------------- -- Table structure for t_user_type -- ---------------------------- DROP TABLE IF EXISTS `t_user_type`; CREATE TABLE `t_user_type` ( `id` int(11) NOT NULL auto_increment, `type_name` varchar(250) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of t_user_type -- ---------------------------- INSERT INTO `t_user_type` VALUES ('1', '管理员'); INSERT INTO `t_user_type` VALUES ('2', '经理'); INSERT INTO `t_user_type` VALUES ('3', '主管');
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值