【Mybatis进阶】--mybatis 入门程序


  前两篇博文总结了mybatis存在的作用和mybatis的框架,接下来就结合一个入门程序对mybatis的运行机制做一个

简单实践。     

1、创建java工程,添加mybatis运行环境和mysql驱动包等相关jar包,不做详细介绍。

   

2、在classpath下创建并配置log4j.properties。mybatis默认使用log4j输出日志信息。

<span style="font-family:SimSun;font-size:18px;"># Global logging configuration
log4j.rootLogger=DEBUG,stdout
# Console output...	

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n</span>

3、在classpath下创建并配置sqlmapconfig.xml

在开始配置sqlmapconfig.xml前,先创建db.properties文件。在该文件内配置数据库连接参数并在

sqlmapconfig.xml中加载db.properties属性值。

好处:避免了数据库连接硬编码的弊端,方便对参数进行统一管理,其他xml也可以引用。

<span style="font-family:SimSun;font-size:18px;">jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456</span>

配置sqlmapconfig.xml

<span style="font-family:SimSun;font-size:18px;"><!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 加载属性文件 -->
	<properties resource="db.properties" />
	<!--配置数据源和事务管理 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
		
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />

			</dataSource>
		</environment>
	</environments>
</configuration></span>

4、创建po类。Po类作为mybatis进行sql映射使用,通常与数据库表对应

<span style="font-family:SimSun;font-size:18px;">public class User {
	private int id;
	private String username;// 用户姓名
	private String sex;// 性别
	private Date birthday;// 生日
	private String address;// 地址
	
	/*getter和setter*/
}</span>

5、写映射文件,一个po类有一个xml映射文件与之对应。

<span style="font-family:SimSun;font-size:18px;"><?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进行分类化管理 -->
<mapper namespace="test">
	<!-- 在映射文件中配置多条sql语句 -->
	<!-- 需求:通过id查询用户表记录 -->
	<!-- 通过select执行数据库查询 id:标识映射文件中sql 将sql语句封装到mappedstatement对象中,因此id称为statement的id 
		parameterType:指定输入参数的类型 #{ }表示一个占位符 -->

	<select id="findUserById" parameterType="int" resultMap="cn.tgb.mybatis.po.User">
		select *
		from user where id=#{id}
	</select>
</mapper>
</span>

6、在sqlmapconfig.xml中加载映射文件

<span style="font-family:SimSun;font-size:18px;"><!-- 加载映射文件 -->
	<mappers>
		<!-- 通过resource方法一次加载一个映射文件 -->
		<mapper resource="sqlmap/User.xml" />
       </mappers</span>

7、编写测试方法

<span style="font-family:SimSun;font-size:18px;">public class MybatisFirst {
	// 会话工厂
	private SqlSessionFactory sqlSessionFactory;

	public void createSqlSessionFactory() throws IOException {
		// 加载 mybatis配置文件
		String resource = "SqlMapConfig.xml";
		// 得到配置文件流
		InputStream inputStream = Resources.getResourceAsStream(resource);

		// 使用SqlSessionFactoryBuilder从xml配置文件中创建会话工厂,传入mybatis配置文件信息
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
				.build(inputStream);
	}

	// 根据id查询用户信息,得到一条记录
	@Test
	public void findUserByIdTest() throws IOException {

		// 通过工厂创建sqlsession
		SqlSession sqlSession = sqlSessionFactory.openSession();

		/*
		 * 通过sqlsession操作数据库 第一个参数:映射文件中statement的id
		 * 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
		 * selectOne:sqlsession封装的底层方法,查询出一条记录
		 */
		User user = sqlSession.selectOne("test.findUserById", 1);

		System.out.println(user);
		// 释放资源
		sqlSession.close();

	}
}</span>

  mybatis实现,与上篇博客mybatis架构图相吻合。首先加载SqlMapConfig.xml全局配置文件,然后使用

SqlSessionFactoryBuilder从xml文件创建SqlSessionFactory。将SqlSessionFactoryBuilder当成一个工具类使用即

可,不需要使用单例管理SqlSessionFactoryBuilder。在需要创建SqlSessionFactory时候,只需要new一次

SqlSessionFactoryBuilder即可,因此可将其提取出来多次利用。根据id查询用户信息开启一个线

程,SqlSessionFactory将开启一个SqlSession会话。SqlSession通过调用底层封装方法实现数据库操作。


与原生JDBC相比,mybatis很大程度简化了代码且保持代码整洁,便于理解和维护。对JDBC遗留问题的解决方案:


1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响

  数据库性能。

解决方案:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库连接。


2、Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决方案:将Sql语句配置在xml文件中与java代码分离。


3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。

解决方案:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。


4、对结果集解析麻烦,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。

解决方案:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值