第2章 核心配置和dao的开发(3课时)

写在前面 第1-2节检查作业#

指定别名 sqlmapconfig的properties配置下#




User.xml可以更改为如下resultType="user":


运行原来的测试类仍旧好用。

第一部分:核心配置(SqlMapConfig.xml)


image.png

1)properties
这些是外部化的,可替代的属性,这些属性也可以配置在典型的 Java 属性配置文件中,
或者通过 properties 元素的子元素来传递。例如:


  
  

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/java13?characterEncoding=UTF-8&useUnicode=true
jdbc.username=root
jdbc.password=root

上例中的配置最终jdbc.username和jdbc.password会采用root/root

总结:外部资源文件里和内部属性里有相同属性名的,读取顺序是先读取properties内部的,然后再读外部的
(外部资源文件里的属性会覆盖内部的)
2)Settings高级配置,缓存等
3)typeAliases配置类型别名 给类起一个代号。

3.1可以单个配置



......

这种方式配置麻烦
3.2整包配置:配置之后,包下的类引用时可以用类名首字母小写或大写

3.3 对于普通的 Java 类型,有许多内建的类型别名。它们都是大小写不敏感的,由于重载
的名字,要注意原生类型的特殊处理。

别名 映射的类型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator
4)typeHandlers
无论是 MyBatis 在预处理语句中设置一个参数,还是从结果集中取出一个值时,类型处
理器被用来将获取的值以合适的方式转换成 Java 类型。
我们不用配置
5)objectFactory
MyBatis 每次创建结果对象新的实例时,它使用一个 ObjectFactory 实例来完成。如果参
数映射存在,默认的 ObjectFactory 不比使用默认构造方法或带参数的构造方法实例化目标
类做的工作多。
我们不用配置
6)plugins 配置插件
7)environments配置环境
environments下可以配置多个environment,也就是说可以配置多套数据库连接
现在启动哪套通过切换environments的default属性























其中的transactionManager
JDBC – 这个配置直接简单使用了 JDBC 的提交和回滚设置。它依赖于从数据源得
到的连接来管理事务范围。
MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让
容器来管理事务的整个生命周期(比如 Spring 或 JEE 应用服务器的上下文)。默认
情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止
它,将 closeConnection 属性设置为 false。
我们选择的jdbc

其中的dataSource

有三种内建的数据源类型(也就是 type=”???”)我们选择的是POOLED:
UNPOOLED – 这个数据源的实现是每次被请求时简单打开和关闭连接。它有一点慢
POOLED – 这是 JDBC 连接对象的数据源连接池的实现,用来避免创建新的连接实例
时必要的初始连接和认证时间。
JNDI – 这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器,容器可以集
中或在外部配置数据源,然后放置一个 JNDI 上下文的引用

 driver – 这是 JDBC 驱动的 Java 类的完全限定名(如果你的驱动包含,它也不是
数据源类)。
 url – 这是数据库的 JDBC URL 地址。
 username – 登录数据库的用户名。
 password – 登录数据库的密码。
8)mappers
实际用四种配置
第一种 指定xml完整路径名

第二种 指定xml文件在磁盘上的位置

第三种 class方式 属于mapper代理方式的配置,他需要满足四个条件才可以用。
(接口与mapper之间有四种强制的绑定关系)

第四种:整包扫描,跟第三种一样,只有mapper代理方式可以用。

第四种优势最明显。前三种需要单个文件配置,第四种是整包扫描(终级)

重点掌握:

properties typeAliases environments mappers

完整配置




































 
 
 
 
 
 



第3节

第二部分:核心接口和类

类:SqlSessionFactoryBuilder可以创建工厂
接口:SqlSessionFactory 可以生产session
SqlSession 执行访问数据库的命令

传统dao

dao 开发

package com.neuedu.test.day02;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
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 com.neuedu.day02.dao.IUserDao;
import com.neuedu.day02.dao.impl.UserDaoImpl;
import com.neuedu.pojo.User;

public class UserServiceTest {
   
    SqlSessionFactory  factory=null;
    
   @Before
   public  void init() throws IOException{
      System.out.println("测试前准备"); 
      //第一步读取SqlMapConfig
  //指定文件位置
  String resource="config/SqlMapConfig.xml";
  //读取资源文件
  InputStream input=Resources.getResourceAsStream(resource);
  //获取SqlSessionFactory
  factory= new SqlSessionFactoryBuilder().build(input);
   }
   @Test
   public void test1() throws IOException{
       IUserDao userDao=new UserDaoImpl(factory);
       User u=userDao.findUserById(1);
       System.out.println(u.getUser_name());
   }
   @Test
   public void test2(){
       System.out.println("test2");
   }
   @After
   public void clear111(){
       System.out.println("测试后清理");
       System.out.println("----------------------------->");
   }
   
} 

public interface IUserDao {
  public User findUserById(int id) throws IOException;
  public int delUser(int id) throws IOException;
}

package com.neuedu.day02.dao.impl;

import java.io.IOException;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.neuedu.day02.dao.IUserDao;
import com.neuedu.pojo.User;

public class UserDaoImpl implements IUserDao {
private SqlSessionFactory  factory;
    public UserDaoImpl(SqlSessionFactory  sqlSessionFactory) {
        //super();
        this.factory=sqlSessionFactory;
    }

    @Override
    public User findUserById(int id) throws IOException {
         //第一步读取SqlMapConfig
      //指定文件位置
      //String resource="config/SqlMapConfig.xml";
      //读取资源文件
      //InputStream input=Resources.getResourceAsStream(resource);
      //获取SqlSessionFactory
      //SqlSessionFactory factory= new SqlSessionFactoryBuilder().build(input);
      //获取SqlSession
      SqlSession session=factory.openSession();
      //执行查询
      User u=session.selectOne("user.findUserById", id);
      System.out.println(u.getUser_name());
      //关闭连接
      session.close();
      return u;
    }

    @Override
    public int delUser(int id) throws IOException {
          //第一步读取SqlMapConfig
      //指定文件位置
      //String resource="config/SqlMapConfig.xml";
      //读取资源文件
      //InputStream input=Resources.getResourceAsStream(resource);
      //获取SqlSessionFactory
      //SqlSessionFactory factory= new SqlSessionFactoryBuilder().build(input);
      //获取SqlSession
      SqlSession session=factory.openSession();
      //执行查询
      int count=session.delete("user.delUser",6);
      System.out.println(count);
      //关闭连接
      session.close();
      return count;
    }

}

你可能感兴趣的:(第2章 核心配置和dao的开发(3课时))