MyBatis介绍
框架技术
是一个应用程序的半成品
提供可重用的公共结构
按一定规则组织的一组组件
例如写简历:使用模板不用考虑布局、排版等,提高效率,可专心在简历内容上,结构统一,便于人事阅读,新手也可以作出专业的简历。
使用框架的好处
不用再考虑公共问题
专心在业务实现上
结构统一,易于学习、维护
新手也可写出好程序
主流框架:
Strucs2 Hibernate Spring Spring MVC Mybatis
ORM(Object Relational Mapping)
编写程序的时候,以面向对象的方式处理数据
保存数据的时候,却以关系型数据库的方式存储
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。它是一个半自动化的orm框架.
Jdbc的问题:
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取数据库链接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
//定义sql语句 ?表示占位符
String sql = "select * from user where username = ?";
//获取预处理statement
preparedStatement = connection.prepareStatement(sql);
//设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
第一个mybatis程序
Mybatis架构
查询用户表记录数
使用MyBatis的开发步骤
第一步:创建java工程
使用myeclipse创建java工程
第二步:加入jar包
第三步:log4j.properties
在resources下创建log4j.properties如下:
# 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
mybatis默认使用log4j作为输出日志信息
第四步:创建MyBatis核心配置文件:mybatisConfig.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 default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdemo" />
<property name="username" value="root" />
<property name="password" value="12345678" />
dataSource>
environment>
environments>
configuration>
第五步:创建pojo类
public class user {
private int id;
private String userName;
private int age;
get set…..
}
第六步:创建sql映射文件
创建sql映射文件UserMapper.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">
<mapper namespace="cn.sns.dao">
<select id="getCount" resultType="int">
select count(*) from user
select>
mapper>
namespace :命名空间,用于隔离sql语句
第七步:加载映射文件
mybatis框架需要加载映射文件,将UserMapper.xml添加在mybatis-config.xml,如下
<mappers><mapper resource="cn/ssm/mapper/UserMapper.xml"/>mappers>
第八步:测试
public class test {
@Test
public void doTest() throws IOException
{
String resource = "mybatisConfig.xml";
//创建一个文件流
InputStream in = Resources.getResourceAsStream(resource);
//创建回话工厂
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
//创建回话
SqlSession sql = factory.openSession();
//执行sql语句
int count = sql.selectOne("cn.sns.dao.getCount");
//打印输出共有多少条记录
System.out.println(count);
}
}