public static void main(String[] args) {
//1.导入驱动jar包
//1.1 新建libs文件夹,右键添加为Library
//2.注册驱动
Connection connection = null;
Statement stmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
//3.获取数据库连接对象
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest", "root", "root");
//4.定义sql语句
String sql = "update user set sex = ‘女‘ where id = 1 ";
//5.获取执行sql的对象
stmt = connection.createStatement();
//6.执行sql
int i = stmt.executeUpdate(sql);
//7.处理结果
System.out.println(i);
} catch (Exception e) {
e.printStackTrace();
} finally {
//8.释放资源
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。
2、Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java
代码。
3、使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能
多也可能少,修改 sql 还要修改代码,系统不易维护。
4、对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记
录封装成 pojo 对象解析比较方便。
Mybatis 框架的使用解决了以上一些问题
1.导入maven坐标安装 Mybatis
2.新建Mybatis主配置文件
3.新建mapper接口,实体类
4.新建mapper映射文件
4.从 XML 中构建 SqlSessionFactory,获取sqlSession对象执行sql
5.关闭资源
1.导入maven坐标安装 Mybatis
由于使用的时mysql数据库,所以也要安装mysql驱动,log4j和junit可选择安装
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.blogsx</groupId>
<artifactId>mybatisStudy0</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<!--mybatis包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- 日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>
2.新建Mybatis主配置文件sqlConfigMap.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">
<!--mybatis的主配置文件-->
<configuration>
<!-- 配置环境-->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事物类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池)-->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis-study"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置、映射配置文件指的是每个dao独立的配置文件-->
<mappers>
<mapper resource="cn/blogsx/dao/IUserDao.xml" />
</mappers>
</configuration>
3.新建mapper接口
package cn.blogsx.dao;
import cn.blogsx.domain.User;
import java.util.List;
/*
用户的持久层接口
*/
public interface IUserDao {
/**
* 查询所有用户
* @return
*/
List<User> findAll();
}
实体类:
package cn.blogsx.domain;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username=‘" + username + ‘\‘‘ +
", birthday=" + birthday +
", sex=‘" + sex + ‘\‘‘ +
", address=‘" + address + ‘\‘‘ +
‘}‘;
}
}
4.新建mapper映射文件
<?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.blogsx.dao.IUserDao">
<!-- 配置查询所有-->
<select id="findAll" resultType="cn.blogsx.domain.User">
select * from user
</select>
</mapper>
注意要再resources下新建mapper映射文件 idea默认不编译src下的目录
4.从 XML 中构建 SqlSessionFactory,获取sqlSession对象执行sql
package cn.blogsx.test;
import cn.blogsx.dao.IUserDao;
import cn.blogsx.domain.User;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
/*
mybatis入门案例
*/
public class MybatisTest {
public static void main(String[] args) throws IOException {
//1、读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2、创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3、使用工厂生产SqlSession对象
SqlSession sqlSession = factory.openSession();
//4、使用SqlSession创建Dao接口的代理对象
IUserDao userDao = sqlSession.getMapper(IUserDao.class);
//5、使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
//6、释放资源
sqlSession.close();
in.close();
}
}
原文:https://www.cnblogs.com/sxblog/p/12939783.html