Maven---MyBatis

Maven—MyBatis

CRUD

目录结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s1egOw9R-1647234763474)(Maven---MyBatis/image-20201129202726599.png)]

首先创建mybatis-study父目录

mybatis-study -->pom.xml

<?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>mybatis-study</groupId>
    <artifactId>mybatis-study</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>MyBatis01</module>
    </modules>

    <dependencies>
        <!--MySQL JDBC依赖包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--MyBatis依赖包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.junit</groupId>
            <artifactId>com.springsource.org.junit</artifactId>
            <version>4.7.0</version>
        </dependency>
    </dependencies>

  <!--为了解决*Mapper.xml编译不了的问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>

然后创建MyBatis01子工程

MyBatis01---->pom.xml

<?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">
    <parent>
        <artifactId>mybatis-study</artifactId>
        <groupId>mybatis-study</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>MyBatis-01</artifactId>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>

在resources里面创建

db.properties

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/zkc?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8
db.username=root
db.password=root

mybatis-config.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">
<configuration>
    <properties resource="db.properties"/>
    <typeAliases>
        <package name="com.zkc.pojo"/>
    </typeAliases>
    <!--环境配置
        default 设置是environment节点中的id
    -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${db.driver}"/>
                <property name="url"  value="${db.url}"/>
                <property name="username" value="${db.username}"/>
                <property name="password" value="${db.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--<mapper resource="com/zkc/dao/BookMapper.xml"/>-->
        <package name="com.zkc.dao"/>
    </mappers>
</configuration>

pojo —>Book

package com.zkc.pojo;

public class Book {
    private int no;
    private String name;
    private String author;
    private String sort;

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getSort() {
        return sort;
    }

    public void setSort(String sort) {
        this.sort = sort;
    }

    @Override
    public String toString() {
        return "Book{" +
                "no=" + no +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", sort='" + sort + '\'' +
                '}';
    }
}

dao—>BookMapper

package com.zkc.dao;

import com.zkc.pojo.Book;

import java.util.List;

public interface BookMapper {
    List<Book> getBookList();

    Book getBookByNo(int no);

    int addBook(Book book);

    int updateBook(Book book);

    int delBook(int no);
}

dao---->BookMapper.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="com.zkc.dao.BookMapper">
    <select id="getBookList" resultType="Book">
        select * from book
    </select>

    <select id="getBookByNo" parameterType="int" resultType="Book">
        select * from book where no = #{no}
    </select>

    <insert id="addBook" parameterType="Book">
        insert into book (name,author,sort) values(#{name},#{author},#{sort})
    </insert>
    
    <update id="updateBook" parameterType="Book">
        update book set name=#{name},author=#{author},sort=#{sort} where no=#{no};
    </update>

    <delete id="delBook" parameterType="int">
        delete from book where no = #{no}
    </delete>
</mapper>

utills—>MyBatisUtills

package com.zkc.utills;
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 java.io.IOException;
import java.io.InputStream;

public class MyBatisUtills {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try{
            String source = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(source);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    //获取SqlSession连接
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

测试MyTest

package com.zkc.test;

import com.zkc.dao.BookMapper;
import com.zkc.pojo.Book;
import com.zkc.utills.MyBatisUtills;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class MyTest {
    /**
     * 查询全部
     */
    @Test
    public void test(){
        SqlSession sqlSession = MyBatisUtills.getSqlSession();
        BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
        List<Book> bookList = bookMapper.getBookList();
        for (Book book : bookList) {
            System.out.println(book);
        }
        sqlSession.close();
    }

    /**
     * 查询根据no查询
     */
    @Test
    public void getByBookId(){
        SqlSession sqlSession = MyBatisUtills.getSqlSession();
        BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
        Book book = bookMapper.getBookByNo(1);
        System.out.println(book);
        sqlSession.close();
    }

    /**
     * 添加图书信息
     */
    @Test
    public void addBook(){
        SqlSession sqlSession = MyBatisUtills.getSqlSession();
        BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
        Book book = new Book();
        book.setName("坏蛋是怎样炼成的");
        book.setAuthor("张三");
        book.setSort("网络小说");
        int num = bookMapper.addBook(book);
        if(num > 0){
            System.out.println("插入成功!");
        }
        sqlSession.commit();
        sqlSession.close();
    }

    /**
     * 修改图书信息
     */
    @Test
    public void updateBook(){
        SqlSession sqlSession = MyBatisUtills.getSqlSession();
        BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
        Book book = bookMapper.getBookByNo(10);
        book.setName("圣墟");
        book.setAuthor("城东");
        book.setSort("网络小说");
        int num = bookMapper.updateBook(book);
        if(num > 0){
            System.out.println("修改成功!");
        }
        sqlSession.commit();
        sqlSession.close();
    }

    /**
     * 删除图书信息
     */
    @Test
    public void delBook(){
        SqlSession sqlSession = MyBatisUtills.getSqlSession();
        BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
        int num = bookMapper.delBook(11);
        if(num > 0){
            System.out.println("删除成功");
        }
        sqlSession.commit();
        sqlSession.close();

    }
}

环境配置environments

 <!--环境配置
        default 设置是environment节点中的id
    -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${db.driver}"/>
                <property name="url"  value="${db.url}"/>
                <property name="username" value="${db.username}"/>
                <property name="password" value="${db.password}"/>
            </dataSource>
        </environment>
    </environments>

属性properties

<!--引入外部配置文件-->
    <properties resource="db.properties"/>

类型别名typeAliases

 <!--设置别名-->
    <typeAliases>
      	<!--可以设置别名-->
        <!--<typeAlias type="com.zkc.pojo" alias="Book"/>-->
      	<!--扫描包下面所有的类,别名为类名,首字母小写-->
        <package name="com.zkc.pojo" />
    </typeAliases>

也是可以在类上直接设置别名,然后扫描类

@Alias("Hello")
public class Book {
    private int no;
    private String name;
    private String author;
    private String sort;
  ...
}

映射器mappers

	<mappers>
        <!--<mapper resource="com/zkc/dao/BookMapper.xml"/>-->
        <!--<mapper class="com.zkc.dao.BookMapper"/>-->
        <package name="com.zkc.dao"/>
    </mappers>

生命周期和作用域

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E89jQE8w-1647234763475)(Maven---MyBatis/image-20201129214021151.png)]

SqlSessionFactoryBuilder

一旦创建SqlSessionFactory就不需要了

SqlSessionFactory

一旦创建就一直存在

SqlSession

链接到链接池的一个请求

resultMap解决数据库与javabean名称不一致

 <resultMap id="BookMap" type="Book">
        <result column="no" property="id"/>
        <result column="name" property="name"/>
        <result column="author" property="author"/>
        <result column="sort" property="sort"/>
    </resultMap>

 <select id="getBookList" resultMap="BookMap">
        select * from book
    </select>

日志

STDOUT_LOGGING
 <!--配置日志-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-apXMNQLJ-1647234763476)(Maven---MyBatis/image-20201129221246967.png)]

LOG4J
 <!--配置日志-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

导入log4j的文件

<dependencies>
        <!--导入log4j包-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

创建log4j.properties文件

# 将等级为DEBUG的日志信息输出到console和file
log4j.rootLogger=debug,console,file

#日志控制台输出信息
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n

#日志输出文件信息
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/zkc.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n


log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j的简单实用
 @Test
    public void TestLog4j(){
        Logger logger = Logger.getLogger(MyTest.class);
        logger.info("info:进入MyTest");
        logger.debug("debug:进入MyTest");
        logger.error("error:进入MyTest");
    }

分页实现

limit

BookMapper接口

List<Book> getLimitBook(Map<String,Object> map);

BookMapper.xml

<select id="getLimitBook" parameterType="map" resultMap="BookMap">
      select * from book limit #{startIndex},#{pageSize}
</select>

测试

 @Test
    public void getLimitBook(){
        SqlSession sqlSession = MyBatisUtills.getSqlSession();
        BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("startIndex",2);
        map.put("pageSize",2);
        List<Book> bookList = bookMapper.getLimitBook(map);
        for (Book book : bookList) {
            System.out.println(book);
        }
        sqlSession.close();
    }

RowBounds分页

PageHelper分页

使用注解开发

CRUD

BookMapper接口

    @Select("select * from user")
    List<Book> getBookList();

    @Select("select * from user where id = #{id}")
    Book getBookById(@Param("id") int id);

测试

 /**
     * 查询全部
     */
    @Test
    public void test(){
        SqlSession sqlSession = MyBatisUtills.getSqlSession();
        BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
        List<Book> bookList = bookMapper.getBookList();
        for (Book book : bookList) {
            System.out.println(book);
        }
        sqlSession.close();
    }

    @Test
    public void getBookById(){
        SqlSession sqlSession = MyBatisUtills.getSqlSession();
        BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
        Book book = bookMapper.getBookById(1);
        System.out.println(book);
        sqlSession.close();
    }

Lombok

参数
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@EqualsAndHashCode

首先settings里面plugins—>lombok

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
    <scope>provided</scope>
</dependency>

多对一

建表

CREATE TABLE `teacher` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师');
CREATE TABLE `student` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`tid` INT(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fktid` (`tid`),
CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');

student

@Data
public class Student {
    private int id;
    private String name;
    private int tid;
    private Teacher teacher;
}

teacher

@Data
public class Teacher {
    private int id;
    private String name;
}

StudentMapper

public interface StudentMapper {
    List<Student> getStudent();
}

TeacherMapper

public interface TeacherMapper {
    Teacher getTeacherById(int id);
}

StudentMapper.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="com.zkc.mapper.StudentMapper">
    
        <resultMap id="StudentTeacher" type="student">
            <id property="id" column="id"/>
            <result property="name" column="name"/>
            <result property="tid" column="tid"/>
            <association property="teacher" column="tid" javaType="Teacher">
                <id property="id" column="id"/>
                <result property="name" column="name"/>
            </association>
        </resultMap>
    
        <select id="getStudent" resultMap="StudentTeacher">
          select * from student
        </select>
</mapper>

TeacherMapper.xml

一对多

Teacher

@Data
public class Teacher {
    private int id;
    private String name;

    private List<Student> studentList;
}

TeacherMapper

public interface TeacherMapper {
    List<Teacher> getTeacherById();
}

TeacherMapper.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="com.zkc.mapper.TeacherMapper">
    <resultMap id="TeacherMap" type="Teacher">
        <id property="id" column="id"/>
        <result property="name" column="tname"/>
        <collection property="studentList" ofType="Student">
            <id property="id" column="sid"/>
            <result property="name" column="sname"/>
            <result property="tid" column="stid"/>
        </collection>
    </resultMap>
    <select id="getTeacherById"  resultMap="TeacherMap">
        select
            t.id,t.name as tname,s.id as sid,s.name as sname,s.tid as stid
            from teacher t
            inner join student s
            on t.id = s.tid
    </select>
</mapper>

MyTest

@Test
public void getBy() {
    SqlSession sqlSession = MyBatisUtills.getSqlSession();
    TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class);
    List<Teacher> list = teacherMapper.getTeacherById();
    for(Teacher teacher : list){
        System.out.println(teacher);
    }
    sqlSession.close();
}
        <id property="id" column="sid"/>
            <result property="name" column="sname"/>
            <result property="tid" column="stid"/>
        </collection>
    </resultMap>
    <select id="getTeacherById"  resultMap="TeacherMap">
        select
            t.id,t.name as tname,s.id as sid,s.name as sname,s.tid as stid
            from teacher t
            inner join student s
            on t.id = s.tid
    </select>
</mapper>

MyTest

@Test
public void getBy() {
    SqlSession sqlSession = MyBatisUtills.getSqlSession();
    TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class);
    List<Teacher> list = teacherMapper.getTeacherById();
    for(Teacher teacher : list){
        System.out.println(teacher);
    }
    sqlSession.close();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值