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)。这里由于测试方便我把测试过的全部都给注释了。如有不足之处还请多多指正。谢谢。
上一篇: 这三法减少茄子吸油