Mybatis的增删改查

一、Mybatis介绍:

1、MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

2、Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatement、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

二、Mybatis下载:

Mybatis下载:https://github.com/mybatis/mybatis-3/releases

Mybatis所需要的jar包可以通过这个地址:https://search.maven.org/ 进行下载
下载jar包

三、导包

创建好工程之后在WEB-INF下的lib里导入mybatis核心包、依赖包、数据驱动包。

在这里插入图片描述

四、创建几个所需要的文件

1、先给一个文件夹config(source folder类型),存放待会儿所需要的文件
在这里插入图片描述

1、配置文件

在config下面放入log4j.properties、SqlMapConfig.xml、sql映射文件User.xml

1、创建log4j.properties:右击config—>new—>Other—>找到-file-创建,随后将下面内容复制即可(mybatis默认使用log4j作为输出日志信息。)

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

2、创建SqlMapConfig.xml:右击config—>new—>Other—>找到-XML File-创建,复制以下内容(SqlMapConfig.xml是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>
	<!-- 和spring整合后 environments配置将废除-->
	<environments default="development">
		<environment id="development">
		<!-- 使用jdbc事务管理-->
			<transactionManager type="JDBC" />
		<!-- 数据库连接池-->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/db_test1?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
</configuration>

3、创建一个User类,同时再创建一个sql数据库
在这里插入图片描述
在这里插入图片描述

4、再来一个sql映射文件User.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="test">
</mapper>

namespace :命名空间,占时只需要理解为隔离sql语句的作用;

-----------------目前为止,准备工作已经ok,接下来是演示增删改查

五、先演示一个查找,搞清楚是怎么操作的

1、在SqlMapConfig.xml里的environments后面添加一个mappers,随后在mappers里面放入映射文件User.xml
在这里插入图片描述
2、在User.xml配置根据id获取用户信息在这里插入图片描述
parameterType:定义输入到sql中的映射类型,
#{id}表示使用preparedstatement设置占位符号并将输入变量id传到sql。
resultType:定义结果映射类型。

3、测试程序

package com.xh.test;

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

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 org.junit.Before;
import org.junit.Test;

import com.xh.user.Student;
import com.xh.user.User;

public class Test001 {
	SqlSessionFactory ssf = null;
	
	//获得一个会话工厂
	@Before
	public void creatFactory(){
		InputStream input = null;
			try {
				input = Resources.getResourceAsStream("SqlMapConfig.xml");
			} catch (IOException e) {
				e.printStackTrace();
			}
		ssf = new SqlSessionFactoryBuilder().build(input);
	}
	
	/** 通过id查找(一个结果集使用:session.selectOne())*/
	//打开一个会话
	@Test
	public void testFindUserById(){
		SqlSession session =ssf.openSession();
		//System.out.println(session);
		User user = session.selectOne("test.findUserById", 2);
		System.out.println(user.getName());
		session.close();
	}
}

六、演示增删改查

1、映射文件User.xml

<mapper namespace="test">
	<!-- 按照id查找——————查(注意:parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。一般用在=之后) -->
	<select id="findUserById" parameterType="int" resultType="com.xh.user.User">
		select * from test001 where id=#{id}
	</select>
	
	<!-- 按照用户名模糊查找——————查(注意:parameterType传输单个简单类型值,${}括号中只能是value。一般用在like之后)-->
	<!-- 注意:如果结果是一个集合,resultType写集合中元素的类型 -->
	<select id="findUserByName" parameterType="string" resultType="com.xh.user.User">
		select * from test001 where name like "%${value}%"
	</select>
	
	<!-- 添加用户(拿取到当前插入数据的ID)——————增 -->
	<insert id="insertUser" parameterType="com.xh.user.User">
		<!-- 返回最近插入数据的id号  参数1:把查出来的ID给到了javaBea的ID  参数2:(AFTER)在插入之后再执行	参数3:结果集的类型 -->
		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			select LAST_INSERT_ID()
		</selectKey>
		insert into test001(name,password,sex,age) values(#{name},#{password},#{sex},#{age})
	</insert>
	
	<!-- 删除用户(根据ID删除指定用户)——————删 -->
	<delete id="deleteUserById" parameterType="int">
		delete from test001 where id=#{id}
	</delete>
	
	<!-- 添加用户(根据ID修改指定用户)——————改 -->
	<update id="updateUser" parameterType="com.xh.user.User">
		update test001 set name=#{name},password=#{password},sex=#{sex},age=#{age} where id=#{id}
	</update>
	
</mapper>

2、测试

package com.xh.test;

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

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 org.junit.Before;
import org.junit.Test;

import com.xh.user.Student;
import com.xh.user.User;

public class Test001 {
	SqlSessionFactory ssf = null;
	
	//获得一个会话工厂
	@Before
	public void creatFactory(){
		InputStream input = null;
			try {
				input = Resources.getResourceAsStream("SqlMapConfig.xml");
			} catch (IOException e) {
				e.printStackTrace();
			}
		ssf = new SqlSessionFactoryBuilder().build(input);
	}
	
	/** 通过id查找(一个结果集使用:session.selectOne())*/
	//打开一个会话
	@Test
	public void testFindUserById(){
		SqlSession session =ssf.openSession();
		//System.out.println(session);
		User user = session.selectOne("test.findUserById", 2);
		System.out.println(user.getName());
		session.close();
	}
	
	/** 通过用户名模糊查找(多个结果集需要用到:session.selectList()) */
	@Test
	public void testFindUserByName(){
		SqlSession session =ssf.openSession();
		//System.out.println(session);
		List<User> user = session.selectList("test.findUserByName", "老");
		for (User x : user) {
			System.out.println(x.getName()+","+x.getSex());
		}
		session.close();
	}

	/**用户添加(自增ID)*/
	@Test
	public void testInertOne() {
		//创建数据库会话实列
		SqlSession session = ssf.openSession();
		//添加用户信息
		User user = new User();
		user.setName("董明珠");
		user.setPassword("password");
		user.setSex("女");
		user.setAge(17);
		session.insert("test.insertUser",user);
		//拿到当前插入数据的id号
		System.out.println(user.getId());
		//提交事务
		session.commit();
		//关闭资源
		session.close();
	}
		
	/**用户删除*/
	@Test
	public void testDeleteById() {
		//创建数据库会话实列
		SqlSession session = ssf.openSession();
		session.delete("test.deleteUserById",10);
		//提交事务
		session.commit();
		//关闭资源
		session.close();
	}
	
	/**用户修改*/
	@Test
	public void testUpdateID() {
		//创建数据库会话实列
		SqlSession session = ssf.openSession();
		User user = new User();
		user.setId(5);
		user.setName("老五");
		user.setPassword("password");
		user.setSex("男");
		user.setAge(18);
		session.update("test.updateUser", user);
		//提交事务
		session.commit();
		//关闭资源
		session.close();
	}
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值