0
点赞
收藏
分享

微信扫一扫

【JavaEE】 01 MyBatis 配置(XML方式)

林肯公园_97cc 2022-03-26 阅读 28

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&amp;characterEncoding=UTF-8&amp;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();
    }

}



举报

相关推荐

0 条评论