• Mybatis_HelloWorld


    【梗概】

    1.根据XML配置文件(全局配置文件,有数据源的一些运行信息)创建一个SqlSessionFactory对象。

    2.sql映射文件:配置了每一个sql以及sql的封装规则。

    3.将sql映射文件注册在全局配置文件中。

    4写代码:

    (1)根据全局配置文件得到SqlSessionFactory。

    (2)使用SqlSession工厂,得到sqlSession对象,使用它进行增删改查。一个sqlSession就是代表和数据库的一次会话,用完关闭。

    (3)使用sql的唯一标识来告诉Mybatis执行执行哪个sql。sql都保存在sql映射文件中。

    【编写第一个基于Mybatis的程序】

    (1)添加jar包

    Mybatis:mybatis-3.1.1.jar

    MySQL驱动包:mysql-connector-java-5.1.7-bin.jar

    (2)建库+表

    1 create database mybatis;
    2 use mybatis;
    3 CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
    4 INSERT INTO users(NAME, age) VALUES('Tom', 12);
    5 INSERT INTO users(NAME, age) VALUES('Jack', 11);

    (3) 添加 Mybatis  的配置文件 conf.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     3 "http://mybatis.org/dtd/mybatis-3-config.dtd">
     4 <configuration>
     5 <environments default="development">
     6    <environment id="development">
     7      <transactionManager type="JDBC" />
     8        <dataSource type="POOLED">
     9             <property name="driver" value="com.mysql.jdbc.Driver" />
    10             <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
    11             <property name="username" value="root" />
    12             <property name="password" value="root" />
    13        </dataSource>
    14    </environment>
    15 </environments>
    16 </configuration>

    (4) 定义表所对应的实体类

    1 public class User {
    2     private int id;
    3     private String name;
    4     private int age;
    5     //get,set 方法
    6 }

    (5)定义操作 users  表的 sql  映射文件 userMapper.xml

    1 <?xml version="1.0" encoding="UTF-8" ?>
    2 <!DOCTYPE  mapper  PUBLIC  "-//mybatis.org//DTD  Mapper  3.0//EN"
    3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    4 <mapper namespace=" com.atguigu.mybatis_test.test1.userMapper">
    5      <select id="getUser" parameterType="int"
    6           resultType="com.atguigu.mybatis_test.test1.User">
    7           select * from users where id=#{id}
    8       </select>
    9 </mapper>

    (6)在 在 conf.xml  文件中注册 userMapper.xml 

    1 <mappers>
    2      <mapper resource="com/atguigu/mybatis_test/test1/userMapper.xml"/>
    3 </mappers>

    (7)编写测试代码:执行定义的 select  语句

     1 public class Test {
     2 public static void main(String[] args) throws IOException {
     3      String resource = "conf.xml";
     4 
     5      //加载 mybatis 的配置文件(它也加载关联的映射文件)
     6      Reader reader = Resources.getResourceAsReader(resource);
     7 
     8     //构建 sqlSession 的工厂
     9     SqlSessionFactory sessionFactory = new 
    10     SqlSessionFactoryBuilder().build(reader);
    11 
    12     //创建能执行映射文件中 sql 的 sqlSession
    13     SqlSession session = sessionFactory.openSession();
    14 
    15     //映射 sql 的标识字符串
    16     String statement = "com.atguigu.mybatis.bean.userMapper"+".selectUser";
    17 
    18      //执行查询返回一个唯一 user 对象的 sql
    19      User user = session.selectOne(statement, 1);
    20      System.out.println(user);
    }
    21 }

    【操作 users  表的 CRUD】

    1).  定义 sql  映射 xml  文件

     1 <insert id="insertUser" parameterType="com.atguigu.ibatis.bean.User">
     2      insert into users(name, age) values(#{name}, #{age});
     3 </insert>
     4 <delete id="deleteUser" parameterType="int">
     5      delete from users where id=#{id}
     6 </delete>
     7 <update id="updateUser" parameterType="com.atguigu.ibatis.bean.User">
     8      update users set name=#{name},age=#{age} where id=#{id}
     9 </update>
    10 <select id="selectUser" parameterType="int" resultType="com.atguigu.ibatis.bean.User">
    11      select * from users where id=#{id}
    12 </select>
    13 <select id="selectAllUsers" resultType="com.atguigu.ibatis.bean.User">
    14      select * from users
    15 </select>

    2). 在 在 config.xml  中注册这个映射文件

    1 <mapper resource="net/lamp/java/ibatis/bean/userMapper.xml"/>

    3). 在 在 dao  中调用:

    1 public User getUserById(int id) {
    2     SqlSession session = sessionFactory.openSession();
    3     User user = session.selectOne(URI+".selectUser", id);
    4     return user;
    5 }

    【注解的实现】

    1).  定义 sql  映射的接口

     1 public interface UserMapper {
     2 @Insert("insert into users(name, age) values(#{name}, #{age})")
     3 public int insertUser(User user);
     4 @Delete("delete from users where id=#{id}")
     5 public int deleteUserById(int id);
     6 @Update("update users set name=#{name},age=#{age} where id=#{id}")
     7 public int updateUser(User user);
     8 @Select("select * from users where id=#{id}")
     9 public User getUserById(int id);
    10 @Select("select * from users")
    11 public List<User> getAllUser();
    12 }

    2). 在 在 config  中注册这个映射接口

    1 <mapper class="com.atguigu.ibatis.crud.ano.UserMapper"/>

    3). 在 在 dao  类中调用

    1 public User getUserById(int id) {
    2     SqlSession session = sessionFactory.openSession();
    3     UserMapper mapper = session.getMapper(UserMapper.class);
    4     User user = mapper.getUserById(id);
    5     return user;
    6 }

     

    【几个可以优化的地方】

    (1)连接数据库的配置单独放在一个 properties  文件中

    ## db.properties
    <properties resource="db.properties"/>
    <property name="driver" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />

    (2)为实体类定义别名, 简化 sql  映射 xml  文件中的引用

    1 <typeAliases>
    2 <typeAlias type="com.atguigu.ibatis.bean.User" alias="_User"/>
    3 </typeAliases>

    (3)可以在 src  下加入 log4j  的配置文件, 打印日志信息

    1. 添加 jar:
    log4j-1.2.16.jar


    2. log4j.properties(

    log4j.properties,
    log4j.rootLogger=DEBUG, Console
    #Console
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %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

    3.log4j.xml( 方式二)
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern"
    value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) " />
    </layout>
    </appender>
    <logger name="java.sql">
    <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
    <level value="debug" />
    </logger>
    <root>
    <level value="debug" />
    <appender-ref ref="STDOUT" />
    </root>
    </log4j:configuration>

    每接触一个新领域,我就像一块掉进水里的海绵,四面八方的养分都让我不断充实。O(∩_∩)O~
  • 相关阅读:
    豆瓣还是能学到东西的!
    Mip-Mapping很重要
    果然还是SB了
    Don't Starve,好脚本,好欢乐
    Soft Renderer的乐趣
    java classloader原理深究
    用gitolite搭建git server
    神话设计模式 --开端
    Dive into Spring framework -- 了解基本原理(二)--设计模式-part2
    Dive into Spring framework -- 了解基本原理(二)--设计模式-part1
  • 原文地址:https://www.cnblogs.com/zhzcode/p/9781747.html
Copyright © 2020-2023  润新知