MyBatis01:环境搭建 + 全局配置文件属性详解 + 数据库连接池

MyBatis:创建web项目

作用:对底层的JDBC进行封装
优点:使用 MyBatis 不用编写Dao实现类,只用写sql命令就好
该项目的目录:
在这里插入图片描述

一、环境搭建

1. 导jar包

在这里插入图片描述

2. 在src下新建全局配置文件mybatis.xml(编写JDBC)

mybatis对配置文件的文件名没有要求。

2.1 在全局配置文件中引入dtd或schema(通俗来说:就是不导入就没提示)

如果导入网络dtd没提示,执行如下操作:导入本地的dtd、xsd文件:
在这里插入图片描述

2.2 mybatis.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>
	<!-- default引用environment的id,当前所使用的环境 -->
	<environments default="default">
		<!-- 声明可以使用的环境 -->
		<environment id="default">
			<!-- 使用原生JDBC事务 -->
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/people"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
	<!-- 这里添加的是执行CRUD操作的接口对应的配置文件(xml文件) -->  
	<mappers>
		<mapper resource="com/bjsxt/mapper/UserMapper.xml"/>
	</mappers>
</configuration>

事务对jdbc进行管理:
事务默认是“自动提交”,通过 conn.setAutoCommit(false); 进行手动提交。
src下的代码全会编译到classes文件夹下,之所以所有代码都往src下放,因为在classes文件下,可以快速通过classpath:快速找到xx文件夹。

3. 建数据库表

create table `user`(
	`id` varchar(64) NOT NULL COMMENT 'ID',
	`name` varchar(255) NOT NULL COMMENT '姓名',
	`age` int NOT NULL COMMENT '年龄',
	PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';

4. 编写实体类

public class UserEntity {	
	private String id;	// ID
	private String name;	// 姓名
	private String age;	// 年龄
	
	//set、get、toString方法
	......
}

5. 编写 “实体类名+Mapper.xml” 文件

文件作用:编写需要执行的SQL命令
反射机制:要书写类的全路径,才能反射到。
在框架的 mybatis.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">
<!-- namesapce:理解成实现类的全路径(包名+类名) -->
<mapper namespace="a.b" >
	<!-- id:方法名;  parameterType:定义参数类型;  resultType:返回值类型;
		如果方法返回值是list,在resultType中写List的泛型,因为mybatis
		对jdbc封装,一行一行读取数据
	-->
	<select id="selAll" resultType="com.xxsxt.pojo.User">
		select * from user
	</select>
</mapper>

6. 在mybatis.xml中加载“实体类+Mapper.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>
   <!-- default引用environment的id,当前所使用的环境 -->
   <environments default="default">
   	<!-- 声明可以使用的环境 -->
   	<environment id="default">
   		<!-- 使用原生JDBC事务 -->
   		<transactionManager type="JDBC"></transactionManager>
   		<dataSource type="POOLED">
   			<property name="driver" value="com.mysql.jdbc.Driver"/>
   			<property name="url" value="jdbc:mysql://localhost:3306/people"/>
   			<property name="username" value="root"/>
   			<property name="password" value="root"/>
   		</dataSource>
   	</environment>
   </environments>
   <!-- 这里添加的是执行CRUD操作的接口对应的配置文件(xml文件) -->  
   <mappers>
   	<mapper resource="com/bjsxt/mapper/UserMapper.xml"/>
   </mappers>
</configuration>

7. 测试文件

public class Test {
	public static void main(String[] args) throws IOException {
		InputStream is = Resources.getResourceAsStream("myabtis.xml");
		//使用工厂设计模式
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		//生产SqlSession
		SqlSession session=factory.openSession();
		
		List<User> list = session.selectList("a.b.selAll");
		for (Useruser: list) {
			System.out.println(user.toString());
		}		
		session.close();
	}
}

二、全局配置文件属性详解

mybatis将数据库表中的列名通过反射找同名属性,就是找实体类中的set( xx ) 方法;这就是mybatis中的重要过程 “自动映射” (autoMapping),通过同名进行自动映射;
mybatis3.2之前找set() 方法;mybatis3.2之后直接找属性。
反射也可以给私有属性赋值。

1. < transactionManager/ > type 属性可取值

JDBC:事务管理使用 JDBC 原生事务管理方式
MANAGED: 把事务管理转交给其他容器(Spring容器)。原生 JDBC 事务 setAutoMapping(false);

2. < dataSouce/ > type 属性

POOLED: 使用数据库连接池
UNPOOLED: 不实用数据库连接池,和直接使用 JDBC 一样
JNDI:java 命名目录接口技术.(使用java语言调用其他语言写的接口)

三、数据库连接池

  1. 数据库连接池:在内存中开辟一块空间,在该空间中存放多个数据库连接对象。
    在这里插入图片描述
    JDBC Tomcat Pool:直接由 tomcat 产生数据库连接池。
    c3p:
    dbcp:
    druid:

使用数据库连接池的目的:在高频率访问数据库时,使用数据库连接池可以降低服务器的系统压力,提升程序的运行效率。

  1. 实现JDBC tomcat Pool的步骤:
    2.1 在 web 项目中的 META-INF 中存放 context.xml
    编写数据库连接池的相关属性。
<?xml version="1.0" encoding="UTF-8"?>
<Context>
	<!-- 资源对象Resource --><!--  -->
		<!-- JDBC连接数据库的4个属性:driverClassName,url,username,password -->
		<!-- 对象状态:maxActive:最大连接数,
					  maxIdle :最大等待数
		-->
		<!-- name:该资源的名字,给其他程序给其他程序调用
			 auth:数据库连接池由应用程序管理还是tomcat管理;默认是tomcat管理
			 maxWait:超时时间
			 type:返回类型
		 -->
	<Resource 
		driverClassName="com.mysql.jdbc.Driver"
		url="jdbc:mysql://localhost:3306/ssm"
		username="root"
		password="root"
		maxActive="50"
		maxIdle="20"
		name="test"
		auth="Container"
		maxWait="10000"
		type="javax.sql.DataSource"
	/>
</Context>

2.2 把项目发布到tomcat中,数据库连接池产生了
启动 tomcat 就会生成数据库连接池

  1. 可以再 java 程序中使用 JNDI 获取数据库连接池中的对象
    3.1 Context :上下文接口 context.xml 文件对象类型
@WebServlet("/pool")
public class DemoServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		try {
			Context cxt = new InitialContext();
			DataSource ds = (DataSource) cxt.lookup("java:comp/env/test");	//通过全路径获取数据库连接池
			Connection conn = ds.getConnection();		//从连接池中获取连接对象
			PreparedStatement ps = conn.prepareStatement("select * from flower");
			ResultSet rs = ps.executeQuery();
			res.setContentType("text/html;charset=utf-8");
			PrintWriter out = res.getWriter();
			while(rs.next()){
				out.print(rs.getInt(1)+"&nbsp;&nbsp;&nbsp;&nbsp;"+rs.getString(2)+"<br/>");
			}
			out.flush();
			out.close();
			rs.close();
		} catch (NamingException e) {
			e.printStackTrace();
		} 
	}
}

tomcat 默认走 Servers 中的配置文件。
在这里插入图片描述
源码下载:https://download.csdn.net/my

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值