Java EE MyBatis 初识 ,mysql增删改查
事前准备
MyBatis框架下,需要用到的jar包
我所理解的结构图
↓↓↓
实体类↓↓↓
package com.gxjd.ShiTiLi;
/**
*
* 实体类,没什么好说的,但要注意要和数据库的,表列名保存一致,就行了
*
*/
public class Customer {
private Integer id;
private String username;
private String jobs;
private String phone;
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 String getJobs() {
return jobs;
}
public void setJobs(String jobs) {
this.jobs = jobs;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Customer [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]";
}
}
**
创建连接类JDBC,是XML文件类型,创建在src目录外面↓↓↓
**
<?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" />
<!-- 配置数据源(数据池) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!--加載映射文件 -->
<mappers>
<mapper resource="com/gxjd/Mapper/CustomerMapper.xml" />
</mappers>
</configuration>
常见的JDBC格式。
创建存放sql语句的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">
<!-- 这个↑↑配置文件开头的代码可以从MyBatis的使用手册中找到 -->
<!-- namespace命名空间:唯一的规则 -->
<mapper namespace="com.gxjd.Mapper.CustomerMapper">
<!-- 根据id查询 id在测试类的时候引用 这里↓↓只能使用点号,不能用/符号 -->
<select id="findCustomerById" parameterType="Integer" resultType="com.gxjd.ShiTiLi.Customer">
select * from t_customer where id=#{id}<!-- 因为这里↑↑调用了实体类,所以下面大括号里的变量要和实体类的一样 -->
</select>
<!-- 模糊查询 id在测试类的时候引用 这里↓↓只能使用点号,不能用/符号 -->
<select id="findCustomerByName" parameterType="String" resultType="com.gxjd.ShiTiLi.Customer">
select * from t_customer where username like '%${value}%'<!--因为这里↑↑调用了实体类,所以下面大括号里的变量要和实体类的一样 -->
</select>
<!--修改 id在测试类的时候引用 这里↓↓只能使用点号.不能用/符号 -->
<insert id="insert" parameterType="com.gxjd.ShiTiLi.Customer">
insert into t_customer(username,jobs,phone)<!--因为这里↑↑调用了实体类,所以下面大括号里的变量要和实体类的一样 -->
values (#{username},#{jobs},#{phone})
</insert>
<!-- 修改 id在测试类的时候引用 这里↓↓只能使用点号.不能用/符号 -->
<update id="update" parameterType="com.gxjd.ShiTiLi.Customer">
update t_customer set<!-- 因为这里↑↑调用了实体类,所以下面大括号里的变量要和实体类的一样 -->
username=#{username},
jobs=#{jobs},
phone=#{phone}
where id=#{id}
</update>
<!-- 删除 id在测试类的时候引用 这里↓↓只能使用点号.不能用/符号 -->
<delete id="delete" parameterType="com.gxjd.ShiTiLi.Customer">
delete from t_customer where id=#{id}<!--因为这里↑↑调用了实体类,所以下面大括号里的变量要和实体类的一样 -->
</delete>
<!-- 查询所有信息 id在测试类的时候引用 这里↓↓只能使用点号.不能用/符号 -->
<select id="select" parameterType="String" resultType="com.gxjd.ShiTiLi.Customer" >
select * from t_customer;
</select>
</mapper>
创建工具类
package com.gcjd.util;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* 工具类:将重复出现的代码,统一到同一个方法中,之后实现相关功能时,就能减少代码量
*
*
*/
public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory=null;
static {
try {
Reader reader=Resources.getResourceAsReader("mybatis-config.xml");//意思:获取配置文件
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);//意思:根据配置文件,构建出SqlSessionFactory
}catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSession getSession() {//意思:获取SqlSession的静态方法,测试类的时候引用
return sqlSessionFactory.openSession();
}
}
到测试类
package com.gxjd.Test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.gcjd.util.MyBatisUtil;
import com.gxjd.ShiTiLi.Customer;
public class MyBatisTest {//测试类
@Test//选有数字‘4’的那个,引入
public void selectId() {//根据ID查询
SqlSession sqlSession=MyBatisUtil.getSession();//↓↓创建的那个XML文件路径,及方法,这里是‘精确查询’方法
Customer customer=sqlSession.selectOne("com.gxjd.Mapper.CustomerMapper.findCustomerById",2);
System.out.println(customer.toString());
sqlSession.close();//关闭
}
@Test//选有数字‘4’的那个,引入
public void selectName() {//模糊查询
SqlSession sqlSession=MyBatisUtil.getSession();//↓↓创建的那个XML文件路径,及方法,这里是‘模糊查询’方法
List<Customer> customer=sqlSession.selectList("com.gxjd.Mapper.CustomerMapper.findCustomerByName","j");
//多数据,用List List
for(Customer customer2 :customer) {
System.out.println(customer2);
}
sqlSession.close();//关闭
}
@Test//选有数字‘4’的那个,引入
public void insert() {//添加
SqlSession sqlSession=MyBatisUtil.getSession();
Customer customer=new Customer();
customer.setUsername("ssssss");
customer.setJobs("tttttt");
customer.setPhone("66666665");//↓↓创建的那个XML文件路径,及方法,这里是‘添加’方法
int cou=sqlSession.insert(" com.gxjd.Mapper.CustomerMapper.insert", customer);
// .insert添加方法
if(cou>0) {
System.out.println("成功添加"+cou+"条数据");
}else {
System.out.println("添加失败");
}
sqlSession.commit();//提交事务,注意:只有查询select,不用提交事务,其他都要
sqlSession.close();//关闭
}
@Test//选有数字‘4’的那个,引入
public void update() {//修改
SqlSession sqlSession=MyBatisUtil.getSession();
Customer customer=new Customer();
customer.setId(5);
customer.setUsername("修改后的");
customer.setJobs("修改后的5");
customer.setPhone("修改后的");//↓↓创建的那个XML文件路径,及方法,这里是‘修改’方法
int con=sqlSession.update(" com.gxjd.Mapper.CustomerMapper.update", customer);
// .update修改方法
if(con>0) {
System.out.println("修改后的"+customer);
}else {
System.out.println("修改失败");
}
sqlSession.commit();//提交事务,注意:只有查询select,不用提交事务,其他都要
sqlSession.close(); //关闭
}
@Test//选有数字‘4’的那个,引入
public void delete() {//删除
SqlSession sqlSession=MyBatisUtil.getSession();
//↓↓创建的那个XML文件路径,及方法,这里是‘删除查询’方法
int con=sqlSession.delete("com.gxjd.Mapper.CustomerMapper.delete",6);
// .delete删除方法
if(con>0) {
System.out.println("成功删除"+con+"条记录");
}else {
System.out.println("删除失败");
}
sqlSession.commit();//提交事务,注意:只有查询select,不用提交事务,其他都要
sqlSession.close();//关闭
}
@Test//选有数字‘4’的那个,引入
public void select() {//查询全部
SqlSession sqlSession=MyBatisUtil.getSession();//↓↓创建的那个XML文件路径,及方法,这里是‘查询全部’方法
List<Customer> customer=sqlSession.selectList("com.gxjd.Mapper.CustomerMapper.select");
//多数据,用 List List
for(Customer customer2: customer) {
System.out.println(customer2);
}
sqlSession.close();//关闭
}
}
到这里,就可以了,不过可以加个日志log文件,加不加都能运行
容易出错的地方,主要在调用路径上。其他到没什么。
例: