Mybatis(第一天 基础知识)

内容:

对原生态jdbc程序(单独使用jdbc开发)进行问题总结

mybatis框架原理(掌握)

mybatis入门程序:用户的增,删,改,查

mybatis开发dao的两种方法:

原始dao开发方法(程序需要编写dao接口和dao实现类)

mybatis特有的mapper接口(相当于dao接口)代理开发方法(掌握)

mybatis配置文件SqlMapConfig.xml

mybatis核心:

mybatis输入映射(掌握)

mybatis输入映射(掌握)

mybatis的动态sql(掌握)

 

1.对原生态jdbc程序中问题总结

需求:使用jdbc查询mysql数据库中用户表的记录

架包:

代码:

 

package com.neusoft;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCTest {
	public static void main(String[] args) {
		
		// 数据库连接
		Connection connection = null;
		// 预编译的statement,好处是提高数据库的性能
		PreparedStatement preparedStatement = null;
		//创建结果集
		ResultSet resultset = null;
		
		try {
			// 记载数据库驱动
			Class.forName("com.mysql.jdbc.Driver");
			// 通过驱动管理类来获取数据库连接
			connection = DriverManager
					.getConnection(
							"jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8",
							"root", "123");
			// 定义sql语句,?表示占位符
			String sql = "select * from users where username=?";
			// 获取预处理statement
			preparedStatement = connection.prepareStatement(sql);
			// 为占位符赋值
			preparedStatement.setString(1, "王五");
			// 向数据库发出sql执行查询,查询出结果集
			resultset = preparedStatement.executeQuery();
			// 遍历查询结果集
			while (resultset.next()) {
				System.out.println(resultset.getString("id") + ","
						+ resultset.getString("username"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 释放资源
			if (resultset != null) {
				try {
					resultset.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (preparedStatement != null) {
				try {
					preparedStatement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
存在的问题:

 

1.数据库连接使用时创建,不使用立即释放,对数据库访问频繁访问,导致数据库资源浪费,影响了数据库的性能。

解决方案:使用数据库的连接池来管理数据库连接。

2.将sql语句硬编译到java代码中,如果sql语句修改,需要重新编译到Java代码中,不利于系统维护。

解决方案:将sql语句配置到xml配置文件中,即使sql变化,也不需要对Java代码重新编译。

3.向preparedStatement中设置参数,对占位符位置的硬编码。

解决方案:将参数,占位符等信息也配置到xml文件中去。

4.从resultset中遍历对象时,将获取的数据硬编码,不利于系统维护。

解决方案:将查询的结果集自动映射成Java对象。

 

 

2.mybatis框架原理

mybatis是持久层的框架,是apache下的顶级项目。

mybatis让程序员将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足需求的sql语句(半自动化)。

mybatis可以将向preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活的映射出Java对象(输出映射)。

框架图:

流程:

先定义mybatis的 全局配置文件,再根据配置文件创建我们的工厂,之后再创建相应的会话,接着要做的就是执行数据库,主要是通过底层封装对象来操作MySQL。

 

 

3.入门程序

需求:

根据用户id(主键)查询用户信息

根据用户名称模糊查询用户信息

添加用户

删除用户

更新用户

mybatis的架包:

整个目录结构:

 

log4j.properties:

 

#在开发环境下debug模式,在生产环境下info模式
log4j.rootLogger=DEBUG,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.org.apache=INFO

 

SqlMapConfig.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>
	<!-- 和spring整合后environments的配置将移除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理,事务控制由mybatis -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池,由mybatis管理 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="123" />
			</dataSource>
		</environment>
	</environments>
</configuration><!-- 和spring整合后environments的配置将移除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理,事务控制由mybatis -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池,由mybatis管理 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="123" />
			</dataSource>
		</environment>
	</environments>
</configuration>

 

第一个功能(根据id查询用户信息):

映射文件:Users.xml(原始的ibatis的命名方式)

 

<?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进行分类化管理,理解sql隔离 注意:使用mapper代理开发,namespace就有特殊的作用
	-->
<mapper namespace="test">
	<!--
		在映射文件中配置很多的SQL语句 通过select来执行数据库的查询
		id:就是用来标识配置文件的SQL,可以称为statement的id,将来会将SQL语句封装在mapperStatment对象中
		parameterType:输入参数的类型 resultType:输出参数的类型  #{}:一个占位符 #{id}:其中的id为输入的参数
	-->
	<select id="findUserById" parameterType="int" resultType="com.neusoft.vo.Users">
		select * from users where id=#{id}
	</select>
</mapper>
 

 

注意要在SqlMapConfig.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>
	<!-- 和spring整合后environments的配置将移除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理,事务控制由mybatis -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池,由mybatis管理 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="123" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 加载映射文件 -->
	<mappers>
	<mapper resource="map/Users.xml"></mapper>
	</mappers>
	
	
</configuration><!-- 加载映射文件 -->
	<mappers>
	<mapper resource="map/Users.xml"></mapper>
	</mappers>
	
	
</configuration>

 

加入一个junit4.9.jar,进行单元测试:

测试代码如下:

 

package com.neusoft.test;

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;
import org.junit.Test;

import com.neusoft.vo.Users;
public class MybatisTest {
	@Test
	public void findUserByIdTest() throws IOException{
		//mybatis配置文件
		String resource="SqlMapConfig.xml";
		//得到配置文件流
		InputStream inputStream=Resources.getResourceAsStream(resource);
		//创建会话工厂
		SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
		//通过工厂得到SqlSession
		SqlSession sqlSession=sqlSessionFactory.openSession();
		//通过SqlSession操作数据库
		//第一个参数是映射文件中的sql的id,第二个输入参数
		Users users=sqlSession.selectOne("test.findUserById", 1);
		System.out.println(users);
		//释放资源
		sqlSession.close();
	}
}
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值