03-mybatis-HelloWorld

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linzhaoliangyan/article/details/88637226

* JDBC例子

    * 前期准备,构建数据库,构建表,插入数据

* 添加依赖

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.16</version>
        </dependency>
    </dependencies>

* 代码

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        // 1 加载驱动
        Connection conn=null;
        PreparedStatement pstm=null;
        ResultSet rs=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            // 2 获得链接
            String url="jdbc:mysql://localhost:3306/hx01?characterEncoding=utf-8";
            String usrename="root";
            String psw="root";
             conn = DriverManager.getConnection(url, usrename, psw);
            // 3 定义sql
            String sql="SELECT * FROM USER WHERE sex=?";
            // 4 获得statement
             pstm = conn.prepareStatement(sql);
            pstm.setString(1,"男");
            // 5 获得结果或者执行
             rs = pstm.executeQuery();
            while (rs.next()){
                String name = rs.getString(2);
                System.out.println(name);
            }
            // 6 关闭资源
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            ;

            try {
                pstm.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}

* 直接使用原生JDBC问题分析

 问题
 1、在创建连接时,存在硬编码
     解决方法: 配置文件(全局配置文件)
 2、在执行statement时存在硬编码(存在sql语句)
     解决方法:配置文件(映射文件)
 3、频繁的开启和关闭数据库连接,会造成数据库性能下降。
     解决方法: 数据库连接池(全局配置文件)

* MyBatis简介

* 框架:软件开发半成品

  * 什么是 MyBatis ?(以前叫IBatis)
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

* Hello Mybatis

    * http://www.mybatis.org/mybatis-3/getting-started.html

   * 添加依赖

  <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.16</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.3.0</version>
        </dependency>
    </dependencies>

   * 创建全局配置文件(SqlMapConfig)

  <?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="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                    value="jdbc:mysql://localhost:3306/hx01?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/User.xml" />
    </mappers>
</configuration>

* 创建sql描述文件(User.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="hx">
    <select id="findUserNameBySex" resultType="string">
        SELECT username FROM
        USER WHERE sex=#{sex}
    </select>
</mapper>

 * 编写代码

  @Test
    public void testFindUsernameBySex() throws Exception {
        // 1 声明全局配置文件
        String resource = "SqlMapConfig.xml";
        // 2 获取的全局配置文件的输入流
        InputStream is = Resources.getResourceAsStream(resource);
        // 3 创建SqlSessionFactory
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
        // 4 创建SqlSession
        SqlSession slqSession=ssf.openSession();
        // 5 调用SqlSession的查询方法
        List<String> userNames = slqSession.selectList("hx.findUserNameBySex", "男");
        // 6 迭代userName列表
        for(String name:userNames) {
            System.out.println(name);
        }
        // 7 关闭资源
        slqSession.close();
    }

     

* JDBC连接所需参数配置到dbconfig.properties中

 driver=com.mysql.jdbc.Driver
 url=jdbc:mysql://localhost:3306/hx01?characterEncoding=utf-8
 username=root
 password=root

 * 添加日志框架

   了解SLF4J
    * SLF4J没有真正地实现日志记录
知道SLF4J与Log4j,logback,..等等区别
    * 一个抽象,其他具体的(就像jdbc与mysql驱动,Oracle驱动)
* https://www.oschina.net/translate/why-use-sl4j-over-log4j-for-logging

* 添加依赖

    <!--slf4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--slf4j到log4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>

* 创建log4j.properties文件

   

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=firestorm.log

log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

log4j.logger.com.codefutures=DEBUG

猜你喜欢

转载自blog.csdn.net/linzhaoliangyan/article/details/88637226