欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis的详解以及使用

程序员文章站 2022-04-06 20:18:34
...

Mybatis的基本使用

这里我说一下mybatis的基本使用,在这里我创建的是Maven项目。

1、导入依赖(jar包)

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.zly</groupId>
	<artifactId>Mybatis</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<dependencies>
		<!-- jstl -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<!-- servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>

		<!-- junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>

		<!-- mybatis依赖 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.7</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.8</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<!-- JDK配置 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.5</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>

			<!-- Tomcat配置 -->
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<port>8080</port>
					<path>/</path>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

2、引入log4j.properties日志文件(这里主要是为了查看运行信息)

log4j.properties:

# 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

3、创建sqlMapConfig.xml文件

这个文件主要用来配置mybatis,加载mapper映射文件。
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">

<!-- MyBatis的配置文件信息 -->
<configuration>
	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>

	<!-- 加载mapper映射文件 -->
	<mappers>
		<mapper resource="com/zly/mapper/UserMapper.xml" />
	</mappers>
</configuration>

这里数据库的配置要记得修改。

4、创建用户实体类User类

User.java:

package com.zly.entity;

/**
 * 用户实体类
 * 
 * @author zly
 */
public class User {
	private int id;
	private String name;// 用户名
	private String pwd;// 密码

	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 String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
	}

}

5、创建User实体类的映射文件UserMapper.xml

这里写所有的增删改查的方法,我这里写了一些方法可以直接用。
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">

<!-- namespace:命名空间,用于隔离sql, 命名空间 user.findUserById -->
<mapper namespace="user">
	<!-- 通过ID查询一个用户 id名字,namespace+id用来定位具体的sql parameterType:参数类型 resultType:返回值,如果bean与数据库一一对应,则会自动映射 
		where id=#{v},#{} 占位符,里面要写一个任意字符 -->
	<select id="findUserById" parameterType="Integer"
		resultType="com.zly.entity.User">
		<!-- 如果用${value}传参,默认没有单引号,如果用#{id}传参,默认带有单引号 -->
		SELECT * FROM tb_user WHERE id = #{id};
	</select>

	<!-- 全查询 -->
	<select id="selectAllUser" resultType="com.zly.entity.User">
		SELECT * FROM tb_user;
	</select>

	<!-- 模糊查询 -->
	<!-- 根据名字模糊查询 #{} 1.相当于? =='' 会带单引号 2.里面的表示字符任意 ${} 1.不带单引号 2.里面的字符必须为value 
		resultType="com.ali.pojo.User" 写的是list的泛型 -->
	<select id="findUserByName" parameterType="String"
		resultType="com.zly.entity.User">
		<!-- select * from t_user where name like '%${value}%' -->
		SELECT * FROM tb_user WHERE name LIKE "%"#{name}"%"
	</select>

	<!-- 分页功能 -->
	<select id="pageHelperUser" parameterType="Map"
		resultType="com.zly.entity.User">
		SELECT * FROM tb_user WHERE id LIMIT
		#{currentPage},#{pageSize}
	</select>


	<!-- 添加用户信息 -->
	<!-- <insert id="insertUser" parameterType="com.baidu.entity.User" useGeneratedKeys="true" 
		keyProperty="id"> <selectKey keyProperty="id" order="AFTER" resultType="Integer"> 
		SELECT LAST_INSERT_ID(); </selectKey> INSERT INTO tb_user SET name = #{name},birthday 
		= #{birthday},sex = #{sex},address = #{address}; </insert> -->

	<!-- 删除用户信息(单删) -->
	<delete id="deleteUserById" parameterType="com.zly.entity.User">
		DELETE FROM tb_user
		WHERE id = #{id};
	</delete>

	<!-- 删除用户信息(批删) -->
	<delete id="deleteUserByIds" parameterType="int[]">
		DELETE FROM tb_user WHERE id IN
		<!-- collection一般用到的值array、list、map。。。 -->
		<foreach collection="array" item="array" index="no" open="("
			separator="," close=")">
			#{array}
		</foreach>
	</delete>

	<!-- 修改用户信息 -->
	<update id="updateUserById" parameterType="List">
		UPDATE tb_user SET
		name = #{name} WHERE id =#{id};
	</update>

	<!-- 批量添加用户信息 -->
	<insert id="insertUsers" parameterType="List">
		INSERT INTO tb_user(name,pwd)
		VALUES
		<foreach collection="list" item="user" index="index"
			separator=",">
			(#{user.name},#{user.pwd})
		</foreach>
	</insert>

	<!-- 添加用户信息并返回添加用户主键id -->
	<!-- <insert id="insertUser" parameterType="com.zly.entity.User" useGeneratedKeys="true" 
		keyProperty="id"> INSERT INTO tb_user SET name = #{name},birthday = #{birthday},sex 
		=#{sex},address = #{address}; </insert> -->

	<!-- 添加用户信息并返回添加用户主键id -->
	<insert id="insertUser" parameterType="com.zly.entity.User">
		<selectKey keyProperty="id" order="AFTER"
			resultType="Integer">
			SELECT LAST_INSERT_ID();
		</selectKey>

		INSERT INTO tb_user SET name = #{name},pwd = #{pwd};
	</insert>
</mapper>

6、创建MyBatis的测试类(MybatisTest)

MybatisTest.java:

package com.zly.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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 com.zly.entity.User;

public class MybatisTest {
	public static void main(String[] args) throws IOException {
		// 加载MyBatis的核心配置文件
		String resource = "sqlMapConfig.xml";
		// 获取输入流
		InputStream resourceAsStream = Resources.getResourceAsStream(resource);
		// 创建sqlSessionFactory工厂
		SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(resourceAsStream);
		// 创建sqlSession
		SqlSession session = sf.openSession();

		// 执行sql语句(查询单条数据方法1)
		// User user = session.selectOne("user.findUserById",1);
		// System.out.println(user+"============================");

		// 执行sql语句(查询单条数据方法2)
		// User user2 = new User();
		// user2.setId(1);
		// // 执行SQL查询
		// User u = session.selectOne("user.findUserById", user2);
		// System.out.println(u + "==============");

		/**
		 * 查询列表数据(全查询)
		 */

		// List<User> list = session.selectList("user.selectAllUser");
		// if (list.size() > 0 && null != list) {
		// for (User user : list) {
		// System.out.println(user); // 关闭连接
		// session.close();
		// }
		// } else {
		// System.out.println("查询异常!");
		// }

		// 执行sql语句(模糊查询)
		// List<User> list = session.selectList("user.findUserByName", "c");
		// System.out.println(list+"==============================");

		/**
		 * 分页功能
		 */
		// 定义Map集合

		// Map<String, Object> map = new HashMap<>();
		// map.put("currentPage", 1);
		// map.put("pageSize", 2);
		// List<User> list = session.selectList("user.pageHelperUser", map);
		// if (list.size() > 0 && null != list) {
		// for (User user : list) {
		// System.out.println(user); // 关闭连接
		// session.close();
		// }
		// } else {
		// System.out.println("查询异常!");
		// }

		/**
		 * 添加用户信息
		 */
		// 第一步:实例化对象

		// User user = new User();
		// user.setName("jack");
		// user.setPwd("5555");
		// // 第二步:要session操作sql语句
		// int i = session.insert("user.insertUser", user);
		// // 第三步:事务提交 session.commit();
		//
		// // 判断返回值
		// if (i > 0) {
		// System.out.println("添加成功!");
		// System.out.println(user.getId() + "======================");
		// } else {
		// System.out.println("添加失败!");
		// }

		/**
		 * 删除用户信息(单删)
		 */

		// User user = new User();
		// user.setId(4);
		// int i = session.delete("user.deleteUserById", user);
		// // 提交事务
		// session.commit();
		//
		// if (i > 0) {
		// System.out.println("删除成功!");
		// // 关闭连接
		// session.close();
		// } else {
		// System.out.println("删除失败!");
		// // 关闭连接
		// session.close();
		// }

		/**
		 * 批量删除用户信息
		 */

		// int[] array = { 1, 3 };
		// int i = session.delete("user.deleteUserByIds", array);
		// // 提交事务
		// session.commit();
		// if (i > 0) {
		// System.out.println("删除成功!");
		// // 关闭连接
		// session.close();
		// } else {
		// System.out.println("删除失败!");
		// // 关闭连接
		// session.close();
		// }

		/**
		 * 修改用户信息
		 */
		// 实例化用户对象

		// User user = new User();
		// user.setName("小四");
		// user.setId(2);
		// // 执行修改
		// int i = session.update("user.updateUserById", user);
		// // 提交事务
		// session.commit();
		// if (i > 0) {
		// System.out.println("修改成功!");
		// // 关闭连接
		// session.close();
		// } else {
		// System.out.println("修改失败!");
		// // 关闭连接
		// session.close();
		// }

		/**
		 * 添加用户信息并返回添加用户主键id
		 */
		// User user1 = new User();
		// user1.setName("小五");
		// user1.setPwd("123");
		// int i = session.insert("user.insertUser", user1);
		// // 提交事务
		// session.commit();
		// if (i > 0) {
		// System.out.println("添加成功!");
		// System.err.println(user1.getId() + "==========================");
		// // 关闭连接
		// session.close();
		// } else {
		// System.out.println("添加失败!");
		// // 关闭连接
		// session.close();
		// }

		/**
		 * 批量添加用户信息
		 */

		User user1 = new User();
		user1.setName("小九");
		user1.setPwd("2222");

		User user2 = new User();
		user2.setName("小八");
		user2.setPwd("3333");

		List<User> list = new ArrayList<>();
		list.add(user1);
		list.add(user2);
		System.out.println(list + "+================");
		int i = session.insert("user.insertUsers", list);
		// 提交事务
		session.commit();

		if (i > 0) {
			System.out.println("添加成功!");
			// 关闭连接
			session.close();
		} else {
			System.out.println("添加失败!");
			// 关闭连接
			session.close();
		}

	}
}

这里我没有用Junit测试,直接运行java项目就行了(Run As --> java application)。这里由于测试方便我把测试过的全部都给注释了。如有不足之处还请多多指正。谢谢。