JDBC编程及问题
JDBC使用步骤
1.引入依赖jar包
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
</dependency>
2.编程流程
加载数据库驱动 ->获取数据库的连接-> 创建statement对象-> 执行SQL->对结果集处理-> 关闭资源
public static void main(String[] args) throws SQLException {
//1、加载数据库的驱动 "com.mysql.jdbc.Driver" 在5.XXX版本下驱动全路径
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
* 2、获取数据库的连接
* Connection getConnection(String url,String user, String password)
* url:连接数据库的信息 =>jdbc:子协议(区分不同的数据库;比MySQL)://ip:端口/库名
* =>jdbc:mysql://localhost:3306/test
* user:用户名
* password:密码
*/
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/wrj","root","");
System.out.println("连接成功啦");
//3、创建Statement对象
Statement statement = connection.createStatement();
//4、执行相关的SQL
String sql = "select * from student";
ResultSet resultSet = statement.executeQuery(sql);
//5、对结果集处理
while (resultSet.next()) {
int sid = resultSet.getInt("SID");
String sname = resultSet.getString("Sname");
int sage = resultSet.getInt("Sage");
String ssex = resultSet.getString("Ssex");
System.out.println(sid+","+sname+","+sage+","+ssex);
}
//6、关闭资源
connection.close();
statement.close();
resultSet.close();
} catch (SQLException e) {
System.out.println("连接失败");
e.printStackTrace();
}
}
JDBC存在问题即解决方案
1.数据库连接创建,释放频繁造成了系统资源的浪费从而影响系统性能
解决方案:使用连接池可以来复用数据库连接
2.SQL语句在java代码中硬编码,造成了代码不易维护,实际使用过程SQL变化可能比较大,SQL变动需要修改java编码
解决方案:将SQL语句放在配置文件中(XML),需求改变就直接修改配置文件
3.对结果集解析存在硬编码(查询行号),SQL变化导致解析的代码的变化
解决方案:将数据库中的数据映射成java对象
mybatis的介绍及原理
mybatis介绍
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
mybatis的使用demo
以查询wrj库下的student表为例:通过ID查询学生信息
1.引入依赖
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
</dependency>
主要给定mybatis依赖,因为连接数据库,还需要使用数据库驱动
2.全局配置文件(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/wrj"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
</configuration>
3.pojo类
/**
* 将数据库中student表数据映射为student对象
*/
public class Student {
private Integer SID;
private String Sname;
private Integer Sage;
private String Ssex;
public Integer getSID() {
return SID;
}
public String getSname() {
return Sname;
}
public Integer getSage() {
return Sage;
}
public String getSsex() {
return Ssex;
}
public void setSID(Integer SID) {
this.SID = SID;
}
public void setSname(String sname) {
Sname = sname;
}
public void setSage(Integer sage) {
Sage = sage;
}
public void setSsex(String ssex) {
Ssex = ssex;
}
@Override
public String toString() {
return "student{" +
"SID=" + SID +
", Sname='" + Sname + '\'' +
", Sage=" + Sage +
", Ssex='" + Ssex + '\'' +
'}';
}
}
4.Mapper接口文件(StudentMapper.java)
public interface StudentMapper {
Student selectStudentById(Integer id);
}
5.配置Mapper.xml文件
(StudentMapper.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">
<!--根标签 namespace命名空间:一般是给定接口文件的全路径-->
<mapper namespace="com.wrj.maventest.Mybatis.mapper.StudentMapper">
<!--
select标签是查询操作标签
id属性:Statement的id,必填的,和接口文件中的方法名保持一致
parameterType:输入参数的类型
resultType:输出参数的类型
#{XXX}:表示占位符 XXX:接口方法中的参数名称
-->
<select id="selectStudentById" parameterType="int" resultType="com.wrj.maventest.Mybatis.pojo.Student">
select * from student where SID = #{id}
</select>
</mapper>
6.修改全局配置文件
<?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/wrj"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!--映射文件-->
<mappers>
<!--resource属性,指定mapper.xml文件的路径-->
<mapper resource="mapper/StudentMapper.xml"/>
</mappers>
</configuration>
7.执行查询操作
public static void main(String[] args) throws IOException {
//创建SQLSessionFactory对象
//1.读取全局配置文件
String path="mybatisConfig.xml";
//2.通过resource获取配置文件流
InputStream is = Resources.getResourceAsStream(path);
//3.创建会话工厂,通过sqlSessionFactoryBuilder类创建
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//4.创建会话
SqlSession sqlSession = sqlSessionFactory.openSession();
//5.通过代理模式创建代理类
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
Student student = studentMapper.selectStudentById(3);
System.out.println(student);
}
mybatis使用步骤:
1.配置mybatis的全局配置文件(数据源,mapper映射)
2.创建sqlSessionFactory对象
3.通过sqlSessionFactory创建sqlSession对象
4.通过sqlSession来操作数据库
5.关闭SQLsession资源