1 Jdbc编程中的问题
1.1 写一个JDBC的小程序
目标:
1、 通过jdbc程序找出当中的问题
2、 重视jdbc编程,企业在技术选型时对于小型的项目或性能要求较高的项目,优先选用jdbc开发。
准备开发环境:
Jdk1.7.72 + Eclipse indigo(3.7) + Mysql5.1
运行环境:
Mysql5.1数据库驱动
创建mysql数据库:
代码如下:
publicclass JdbcTest {
//定义sql语句,根据名称查询用户表的记录
privatestatic String sql = "SELECT * FROM USER WHERE username = ?";
publicstaticvoid main(String[] args) throws SQLException {
//数据库连接
Connection connection = null;
//预编译statement
//好处:防止 sql注入,提高数据的性能
PreparedStatement preparedStatement = null;
//结果集
ResultSet resultSet = null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//连接数据库
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis", "root", "mysql");
//构造preparedStatement
preparedStatement =connection.prepareStatement(sql);
//向preparedStatement中占位符的位置设置参数
preparedStatement.setString(1, "张三");
//发起数据库查询请求,得到结果集
resultSet =preparedStatement.executeQuery();
//遍历查询结果
while(resultSet.next()){
int id = resultSet.getInt("id");
String username =resultSet.getString("username");
Date birthday = resultSet.getDate("birthday");
System.out.println(id+" "+username+" "+birthday);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//释放资源
if(resultSet!=null){
resultSet.close();
}
if(preparedStatement!=null){
preparedStatement.close();
}
if(connection!=null){
connection.close();
}
}
}
}
1.2 总结问题
1、 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译。系统可维护性不高。
设想如何解决?
能否将sql单独配置在配置文件中。
2、 数据库连接频繁开启和释放,对数据库的资源是一种浪费。
设想如何解决?
使用数据库连接池管理数据库连接。
3、 向preparedStatement中占位符的位置设置参数时,存在硬编码(占位符的位置,设置的变量值)
设想如何解决?
能否也通过配置的方式,配置设置的参数,自动进行设置参数。
4、 解析结果集时存在硬编码(表的字段名、字段的类型)
设想如何解决?
能否将查询结果集映射成java对象。2 、Mybatis框架
2.1 Mybatis是什么?
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis 通过xml或注解的方式将要执行的statement配置起来,并通过java对象和statement中的sql进行 映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回1、 mybatis配置
SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
1 mybatis第一程序
1.1 准备环境:
l Mybatis运行环境:
去mybatis官方网站下载Mybatis3.2.3。
mybatis-3.2.3.jar:mybatis核心包
mybaits的依赖包:l 准备开发环境:
Jdk1.7.72
Eclipse indigo(3.7)
Mysql5.1
l 数据库运行环境:
Mysql5.1数据库驱动l 创建mysql数据库:
3.2 用户查询开发
需求:
根据用户id查询一条记录(返回单条记录)
查询用户列表(返回list集合)
3.2.1 创建java工程
3.2.2
加入mybatis的jar包
加入 :mybatis核心包、mybatis依赖包、数据驱动包
3.2.3 配置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
注意:开发阶段使用DEBUG
3.2.3 配置mybatis全局配置文件
全局配置文件:SqlMapConfig.xml(名称不是固定的)配置的内容包括:
数据库运行环境(和spring整合废除了)
Mapper映射文件
3.2.5 创建po类
建议po类名和表名一致,属性名和表字段名一致。