MyBatis配置 XML方式
文章目录
一、数据库中存入数据
二、使用MyBatis
1.引入MyBatis
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>hellomybits_02comment</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
</dependencies>
</project>
没有log4j的记得加上 是自己加上log4j.properties
log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
2.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>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="person.hyy.dao.UserDao"/>
</mappers>
</configuration>
3.建立持久化类
package person.hyy.domain;
import java.io.Serializable;
public class User implements Serializable {
private int id;
private String name;
private int age;
private String sex;
private String addr;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", addr='" + addr + '\'' +
'}';
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
4.建立映射器 一个接口一个XML文件构成
package person.lmy.dao;
import org.apache.ibatis.session.RowBounds;
import person.lmy.domain.User;
import person.lmy.domain.UerResult;
import java.util.List;
public interface UserDao {
/*查*/
List<User> findAll();
/*单项查询*/
User findById(int id);
/*模糊查询*/
List<User> findByName(String author);
/*聚合查询*/
int findTotal();
/*分页查询*/
List<User> findByRowBounds(RowBounds rowBounds);
/*resultMap元素*/
List<UerResult> findAllResult();
/*多参传递*/
List<User> findByTitleAuthor(User userparam);
/*增*/
int addUser(User user);
/*改*/
int updateUser(User user);
/*删*/
int delUser(int id);
}
<?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="person.lmy.dao.UserDao">
<!--查询-->
<select id="findAll" resultType="person.lmy.domain.User">
SELECT * FROM book
</select>
<!--单项查询-->
<select id="findById" parameterType="int" resultType="person.lmy.domain.User">
SELECT * FROM book WHERE id = #{id}
</select>
<!--模糊查询-->
<select id="findByName" parameterType="String" resultType="person.lmy.domain.User">
SELECT * FROM book WHERE `author` like #{author}
</select>
<!--聚合查询-->
<select id="findTotal" resultType="int">
SELECT COUNT(*) FROM book
</select>
<!--分页查询-->
<select id="findByRowBounds" resultType="person.lmy.domain.User">
SELECT * FROM book
</select>
<!-- ResultMap 元素 -->
<resultMap id="userMap" type="person.lmy.domain.UerResult">
<id property="idResult" column="id"/>
<result property="titleResult" column="title"/>
<result property="authorResult" column="author"/>
<result property="publication_dateResult" column="publication_date"/>
<result property="priceResult" column="price"/>
</resultMap>
<select id="findAllResult" resultMap="userMap">
SELECT * FROM book
</select>
<!--多参传递-->
<select id="findByTitleAuthor" parameterType="person.lmy.domain.User" resultType="person.lmy.domain.User">
SELECT * FROM `book` WHERE title LIKE #{title} AND author like #{author}
</select>
<!--增 主键回填-->
<insert id="addUser" parameterType="person.lmy.domain.User" useGeneratedKeys="true" keyProperty="id">
INSERT into book(title,author,publication_date,price) VALUES (#{title},#{author},#{publication_date},#{price});
</insert>
<!--改-->
<update id="updateUser" parameterType="person.lmy.domain.User">
UPDATE book set price=#{price} WHERE title=#{title}
</update>
<!--删除-->
<delete id="delUser" parameterType="int">
DELETE FROM book WHERE id=#{id}
</delete>
</mapper>
5.测试
package person.lmy.test;
import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import person.lmy.dao.UserDao;
import person.lmy.domain.UerResult;
import person.lmy.domain.User;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Timestamp;
import java.util.List;
public class MyBatisTest {
private InputStream in;
private SqlSessionFactoryBuilder builder;
private SqlSessionFactory factory;
private SqlSession session;
private UserDao userDao;
@Before
public void init() throws IOException {
in=Resources.getResourceAsStream("mybatis.xml");//资源图纸
builder = new SqlSessionFactoryBuilder();//建造者
factory = builder.build(in);//建造者建立工程
session = factory.openSession();//工程模式生产session
userDao = session.getMapper(UserDao.class);//代理模式得到Mapper
}
/*查询全部*/
@Test
public void testFindAll(){
List<User> users = userDao.findAll();
for(User user:users){
System.out.println(user);
}
}
/*条件查询*/
@Test
public void testFindById(){
System.out.println("查询到"+userDao.findById(3));
}
/*模糊查询*/
@Test
public void testFindByName(){
List<User> users = userDao.findByName("%吴%");
for(User user:users){
System.out.println(user);
}
}
/*聚合查询*/
@Test
public void testFindTotal(){
System.out.println(userDao.findTotal());
}
/*分页查询*/
@Test
public void testFindByRowBounds(){
RowBounds rowBounds = new RowBounds(0,3);
List<User> users = userDao.findByRowBounds(rowBounds);
for(User user:users){
System.out.println(user);
}
}
/*resultMap 元素*/
@Test
public void testFindAllRusult(){
List<UerResult> users = userDao.findAllResult();
for (UerResult user:users){
System.out.println(user);
}
}
/*多参数传递*/
@Test
public void testFindByTitleAuthor(){
User userparam = new User();
userparam.setTitle("%西%");
userparam.setAuthor("%恩%");
List<User> users = userDao.findByTitleAuthor(userparam);
for(User user:users){
System.out.println(user);
}
}
/*添加一条信息*/
@Test
public void testAddUser(){
User user = new User();
user.setAuthor("高尔基");
user.setTitle("童年");
user.setPublication_date(Timestamp.valueOf("2022-03-21 21:33:18.0"));
user.setPrice(89);
System.out.println("增加"+userDao.addUser(user)+"条记录");
System.out.println(user);
session.commit();
}
/*修改信息*/
@Test
public void testUpdateUser(){
User user = new User();
user.setPrice(70);
user.setTitle("红楼梦");
System.out.println("修改"+userDao.updateUser(user)+"条记录");
}
/*删除信息*/
@Test
public void testDelUser(){
System.out.println("删除"+userDao.delUser(8)+"条记录");
}
@After
public void destory() throws IOException {
session.commit();
session.close();
in.close();
}
}