Mybatis入门(3)

day1
项目名 02mybatis_crud
三、深入了解配置文件
1.mybatis.cfg.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>
	<!-- environments 指 mybatis可以配置多个环境  默认的是development所在的环境
		每个环境都可以创建对应的sqlsesiionfactory
	 -->
  <environments default="development">
    <environment id="development">
    <!-- 事务分为两种,一种是jdbc,一种是manager
    JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
    MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
     -->
      <transactionManager type="JDBC"/>
     <!-- 数据源类型:
				     UNPOOLED -这个数据源的实现只是每次被请求时打开和关闭连接。虽然有点慢,但对于在数据库连接可用性方面没有太高要求的简单应用程序来说,是一个很好的选择。(每一次都申请再释放,比较耗费资源)
				     POOLED这种数据源的实现利用“数据库连接池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
     			   	 JNDI 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
      -->
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  
  <!-- 定义sql语句映射文件(可能有多个) -->
  <mappers>
    <mapper resource="com/mybatis/entity/user.mapper.xml"/>
  </mappers>
</configuration>

具体的信息可查看官方源文档
在这里插入图片描述

  1. mapper文件
<?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">
<!-- namespace命名空间(防止sql语句的id重名)
	 namespace命名  : 包名 + 类名  /  包名 + mapper文件名	
	 parameterType 指sql语句参数类型
	 resultType 指返回结果的类型	
	 useGeneratedKeys 使用自增主键
 -->
<mapper namespace="com.mybatis.entity.UserMapper">

  <!-- 查询单个用户
  			id在该文件中唯一, 根据传入的id来找对应的sql执行语句
   -->
  <select id="selectUser" resultType="com.mybatis.entity.User">
    select * from user where id = #{id}
  </select>
  <select id="selectAll" resultType="com.mybatis.entity.User">
    select * from user 
  </select>
  <insert id="addUser" parameterType="com.mybatis.entity.User" useGeneratedKeys="true">
  	insert into user(name,pwd) values(#{name},#{pwd})
  </insert>
  <update id="updateUser" parameterType="com.mybatis.entity.User">
  	update user set name=#{name},pwd=#{pwd} where id=#{id}
  </update>
  <delete id="deleteUser">
  	delete from user where id=#{id}
  </delete>
</mapper>

在这里插入图片描述

  1. 工作原理
    MyBatisUtil.java
package com.mybatis.util;

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

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
	public static SqlSessionFactory getSqlSessionFactory() throws IOException {
		String resource = "mybatis.cfg.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		return sqlSessionFactory;
	}
	
	public static SqlSession getSession() throws IOException{
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		return sqlSessionFactory.openSession();
	}
}

首先通过读取mybatis.cfg.xml核心配置文件创建sqlSessionFactory,通过sqlSessionFactory的openSession方法获取sqlSession。
然后 sqlSession通过id找到对应的sql语句,执行相关操作。

举一个简单的应用层实例(查询单个信息)

public class UserDao {
	public User getById(int id) throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		User user = (User) session.selectOne("com.mybatis.entity.UserMapper.selectUser",id);
		session.close();
		return user;
	}
}
  1. XML配置文件优化
    导入properties配置文件

    a). 在src下加入db.properties文件

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/test?useSSL=false
username = root
password = 123456
    b). 在mybatis.cfg.xml中添加properties标签
<configuration>
	<!-- environments 指 mybatis可以配置多个环境  默认的是development所在的环境
		每个环境都可以创建对应的sqlsesiionfactory
	 -->
  <properties resource="db.properties" />
  <environments default="development">
    <environment id="development">
    <!-- 事务分为两种,一种是jdbc,一种是manager
    JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
    MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
     -->
      <transactionManager type="JDBC"/>
     <!-- 数据源类型:
				     UNPOOLED -这个数据源的实现只是每次被请求时打开和关闭连接。虽然有点慢,但对于在数据库连接可用性方面没有太高要求的简单应用程序来说,是一个很好的选择。(每一次都申请再释放,比较耗费资源)
				     POOLED这种数据源的实现利用“数据库连接池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
     			   	 JNDI 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
      -->
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
  1. 别名的优化
<typeAliases >
		<!-- 为指定类型指明别名   使得在mapper映射文件中可以简化引用 -->
  		<typeAlias type="com.mybatis.entity.User" alias="User"></typeAlias>
  </typeAliases>
<typeAliases >
<!-- 为某个包下所有类指定别名  默认别名是对应的类名 -->
  		<package name="com.mybatis.entity" />
</typeAliases>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值