mybatis

从0开始学习mybatis

一.持久层框架技术解决方案

二.Mybatis入门案例

一.持久层框架技术解决方案

l JDBC技术:

Connection

PreparedStatement

ResultSet

l SpringjdbcTemplate

Spring中对jdbc的简单封装

l ApacheDBUtils

jdbc的简单封装

 

但是:SpringjdbcTemplateApacheDBUtils都不是框架,只是工具类

传统jdbc代码:

 

 1 public class demo2 {
 2  
 3     public static void main(String[] args) {
 4         
 5         Connection con = null;
 6         Statement st = null;
 7         ResultSet rs = null;
 8         
 9         try {
10             //注册驱动
11             Class.forName("com.mysql.jdbc.Driver");
12             
13             //建立连接
14             con = DriverManager.getConnection("jdbc:mysql://localhost:3306/study2", "root", "123");
15             
16             //创建操作sql语句的Statement对象
17             st = con.createStatement();
18             
19             //创建sql语句
20             String sql = "select*from student";
21             
22             //操作sql语句,返回一个结果集
23             rs = st.executeQuery(sql);
24             
25             //遍历结果集,输出
26             while (rs.next()) {
27                 int id = rs.getInt("id");
28                 String name = rs.getString("username");
29                 String password = rs.getString("password");
30                 String email = rs.getString("email");
31                 
32                 System.out.println(id+"   "+name+"   "+password+"   "+email);
33             }
34             
35         } catch (ClassNotFoundException e) {
36             e.printStackTrace();
37         } catch (SQLException e) {
38             e.printStackTrace();
39         }finally{
40             try {
41                 if(rs != null)
42                     rs.close();
43                 if(st != null)
44                     st.close();
45                 if(con != null)
46                     con.close();
47                 con.close();
48             } catch (SQLException e) {
49                 e.printStackTrace();
50             }            
51         }
52     }
53  
54 }

 

 

 

Mybatis概述

持久层框架,java编写。

封装jdbc操作细节,关注sql语言本身,无需注册驱动,创建连接。。。

l ORM实现结果集封装。

 

ORM:(Object Relational Mapping

对象关系映射

:把数据库表和实体类及实体类属性对应起来,让我们操作实体类实现操作数据库表

 

二.Mybatis入门案例

编译软件:IDEA2018   mysql8

 

 Mybatis的环境搭建

  1. 创建maven工程并导入坐标
  2. 创建实体类和Dao接口
  3. 创建mybatis的主配置文件:SqlMapConfig.xml
  4. 创建映射配置文件:IProDao.xml
  • mybatis的配置文件位置必须和dao接口的包结构相同
  • 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
  • 映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名

!!!无需再写实现类

一览目录结构:

 

 

 

pom.xml文件:依赖包可从mybatis官网找到  https://mybatis.org/mybatis-3/getting-started.html

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.12</version>
    </dependency>

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>
</dependencies>

小贴士:

在实体类的编写过程中,常常需要应用大量的getset方法,需要写大量的重复代码,即有的工具有自动生成功能,当时也会使实体类中产生大量冗余代码,使得代码变,springboot为我们提供了相应注解可以解决这类问题----@Data

    接下来简明扼要的介绍一下@Data注解的功能与使用方法

    ## 注解功能

        1@Data可以为类提供读写功能,从而不用写getset方法。

        2、他还会为类提供 equals()hashCode()toString() 方法。

l     使用方法--一下仅提供idea的使用方法

    1、下安装lombok插件

    2、重启idea

    3、在maven库中添加依赖

            <dependency>

                <groupId>org.projectlombok</groupId>

                <artifactId>lombok</artifactId>

                <version>1.16.10</version>

            </dependency>

    4、在实体类上添加@Data注解即可生效

 

 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">
<configuration>
    <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <!--配置连接数据库的四个基本信息,mysql 8-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url"
                          value="jdbc:mysql://localhost:3306/sys?
                          useUnicode=true&amp;characterEncoding=UTF-8&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC"/>
                <property name="username" value="root" />
                <property name="password" value="123456" />
                <!--配置连接数据库的四个基本信息,mysql 5-->
                 <property name="driver" value="com.mysql.jdbc.Driver"/>
                 <property name="url" value="jdbc:mysql://localhost:3306/TryMyBatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射配置文件的位置,映射配置文件指每个dao独立的配置文件-->
    <mappers>
        <!-- 第一种方式,加载 resource-->
        <mapper resource="com/it/Dao/IUserDao.xml"></mapper>

        <!-- 第三种方式,包扫描器要求(推荐使用此方式):
             1、映射文件与接口同一目录下
             2、映射文件名必需与接口文件名称一致
        -->
        <!--<package name="com.cenobitor.mapper"/>-->
    </mappers>
</configuration>

Dao接口:com.it.Dao.IUserDao

package com.it.Dao;

import com.it.Domain.User;

import java.util.List;

public interface IUserDao {
    List<User> findAll();
}

mapper映射文件:com.it.Dao.IUserDao.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.it.Dao.IUserDao">
    <!--配置查询所有-->
    <select id="findAll" resultType="com.it.Domain.User">
        select * from user
    </select>
</mapper>

com.it.Domain.User

package com.it.Domain;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
public class User implements Serializable {
    private Integer id;
    private String username;// 用户姓名
    private String sex;// 性别
    private Date birthday;// 生日
    private String address;// 地址
}

test:

package com.qinlu;


import com.it.Dao.IUserDao;
import com.it.Domain.User;
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.InputStream;
import java.util.List;


public class MybatisTest {
    /**
     * 入门案例
     * @param args
     */
    public static void main(String[] args) throws Exception{
        //读取配置文件
        InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml");
        //创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        //工人builder帮我建造工厂
        SqlSessionFactory factory=builder.build(in);
        //使用工厂生产SqlSession对象
        SqlSession session=factory.openSession();
        //使用SqlSession创建dao接口代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);
        //使用代理对象执行方法
        List<User> users = userDao.findAll();
        for (User user:users){
            System.out.println(user);
        }
        //释放资源
        session.close();
        in.close();
    }
}

log4j.properties

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

 

运行结果:

 

 

 

 

posted @ 2020-04-27 10:40  今天不上班  阅读(206)  评论(0)    收藏  举报