MyBatis入门程序
一.查询用户
1.使用客户编号查询用户
(1).创建一个数据表
USE spring; #创建一个名为t_customer的表 CREATE TABLE t_customer( id INT(32) PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50), jobs VARCHAR(50), phone VARCHAR(16) ); #插入3条数据 INSERT INTO t_customer VALUES('1','joy','doctor','13745874578'); INSERT INTO t_customer VALUES('2','jack','teacher','12745874578'); INSERT INTO t_customer VALUES('3','tom','worker','14745874578');
(2)创建一个web项目,将Mybatis核心包放入,如图
(3)在src目录下创建一个com.itheima.po包,在该包下创建持久化类Customer,
package com.itheima.po; /** * 客户持久化类 * @author 12428 * */ import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper; 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 + "]"; } }
(4)在src目录下,创建一个com.itheima.mapper的包,并在包中创建映射文件CustomerMapper.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的位置--> <mapper namespace="com.itheima.mapper.CustomerMapper"> <!-- 根据客户编号来获取客户信息 --> <select id="findCustomerById" parameterType="Integer" resultType="com.itheima.po.Customer"> select * from t_customer where id=#{id} </select> </mapper>
<mapper>元素是配置文件的根元素,它包含了一个namespace属性,该属性为<mapper>元素指定了唯一的命名空间,通常会设置为“包名+SQL映射文件名”的形式,其中<select>元素中的信息是用于执行查询操作的配置,其中ID属性是<select>在配置文件中的唯一标识。parameterType是指定参数类型,resultType是指定查询返回查询结果的类型。在定义的Sql语句中#{id}是用于表示一个占位符
(5)在src的目录下,创建Mybatis的核心配置文件mybatis-config.xml,给配置文件中 的两个步骤:(1)配置环境;(2)配置Mapper.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>
<!--1. 配置环境 -->
<environments default="mysql">
<!-- 配置id为mysql的数据库环境 -->
<environment id="mysql">
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC"/>
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/spring"/>
<property name="username" value="root"/>
<property name="password" value="abc"/>
</dataSource>
</environment>
</environments>
<!-- 配置Mapper的位置 -->
<mappers>
<mapper resource="com/itheima/mapper/CustomerMapper.xml"/>
</mappers>
</configuration>
(6).在src目录下,创建一个com.itheima.test包,在该包下创建一个测试类,并编写测试方法
package com.itheima.test; import java.io.InputStream; 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 org.junit.Test; import com.itheima.po.Customer; /** * MyBatis的测试类 * @author 12428 * */ public class MyBatisTest { /** * 根据客户编号查询信息 * @throws Exception */ @Test public void findCustomerByIdTest()throws Exception{ //1.读取配置文件 String resource ="mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); //2.根据配置文件来构建SqlSessionFactory会话工厂实例 SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //3.通过会话工厂实例创建会话对象 SqlSession sqlSession=sessionFactory.openSession(); //4.通过sqlSession实例来执行方法 Customer customer=sqlSession.selectOne("com.itheima.mapper.CustomerMapper.findCustomerById",1); //5.打印输出结果 System.out.println(customer.toString()); //6.关闭资源 sqlSession.close(); } }
(7)测试结果
2.使用客户名模糊查询用户信息
(1)在映射文件CustomerMapper.xml中,添加根据客户模糊查询客户信息列表的Sql语句,具体代码如下
<!-- 根据客户名模糊查询客户的信息 -->
<select id="findCustomerByName" parameterType="String" resultType="com.itheima.po.Customer">
select * from t_customer where username like '%${value}%'
</select>
在使用“${}”进行SQL字符串拼接时,是无法防止SQL语句注入问题,如果想要实现模糊查询,又要防止SQL语句,可以对上述中的sql语句中的 '%${value}%' 改为concat()函数进行字符串拼接,如下
select * from t_customer where username like concat('%',#{value},'%')
(2)在测试类中添加查询的代码
/** * 模糊查询用户的信息 */ @Test public void findCustomerByNameTest()throws Exception{ //1.读取配置文件 String resource ="mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); //2.根据配置文件来构建SqlsessionFactory SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //3.根据工厂来创建会话对象 SqlSession sqlSession= sqlSessionFactory.openSession(); //4.执行查询方法 List<Customer> customers=sqlSession.selectList("com.itheima.mapper.CustomerMapper.findCustomerByName", 'j'); //5.输出结果集 for(Customer customer:customers) { System.out.println(customer); } //6.关闭SqlSession sqlSession.close();
(3)查询结果
二.添加客户
在MyBatis中由一个约定:
在形式上,无论输出参数和输入参数,都只能有一个,如果输入的参数是多种类型的,可以使用数组或者对象。
如果输入参数是简单类型(8个基本类型+String)是可以使用任何占位符的,#{xxx},如果是对象类型,则必须是对象的属性,#{属性名}
1.添加客户
(1)在配置文件customerMapper.xml中添加如下内容
<!-- 添加用户 --> <insert id="addCustomer" parameterType="com.itheima.po.Customer"> insert into t_Customer(username,jobs,phone) values(#{username},#{jobs},#{phone}) </insert>
(2)在测试类中添加addCustomer方法
/** * 添加客户 */ @Test public void addCustomer() throws Exception{ //1.读取配置文件 String resource="mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //2.通过SqlSession对象 SqlSession sqlSession=sqlSessionFactory.openSession(); //3.执行添加操作 //3.1创建一个Customer对象 Customer customer=new Customer(); customer.setUsername("rose"); customer.setJobs("student"); customer.setPhone("11111111"); //3.2执行sqlSession的添加操作 int num=sqlSession.insert("com.itheima.mapper.CustomerMapper.addCustomer", customer); //3.3通过查询结果来判断是否插入成功 if(num>0) { System.out.println("您成功插入了"+num+"条数据"); }else { System.out.println("插入失败!"); } //3.4提交事务 sqlSession.commit(); //4.关闭sqlSession sqlSession.close(); }
注意:如果是增删改,是需要提交事务的,不然是不会生效的。
三.修改用户,删除用户
(1).在配置文件中添加如下代码:
<!-- 更新客户 --> <update id="updateCustomer" parameterType="com.itheima.po.Customer" > update t_customer set username=#{username},jobs=#{jobs},phone=#{phone} where id=#{id} </update> <!-- 删除用户 --> <delete id="deleteCustomer" parameterType="Integer"> delete from t_customer where id=#{id} </delete>
(2)在测试类中添加如下代码
/** * 更新客户 */ @Test public void updateCustomerTest() throws Exception{ //1.读取配置文件 String resource ="mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); //2.获取会话工厂对象 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //3.创建会话对象 SqlSession sqlSession=sqlSessionFactory.openSession(); //4.执行会话对象的方法 Customer customer=new Customer(); customer.setId(1); customer.setUsername("zhaoli"); customer.setJobs("teacher"); customer.setPhone("111111"); int num=sqlSession.update("com.itheima.mapper.CustomerMapper.updateCustomer", customer); //5.输出结果,根据返回的结果来判断 if(num>0) { System.out.println("修改成功!"); }else { System.out.println("修改失败!"); } //6.提交事务 sqlSession.commit(); //7.关闭sqlSession对象 sqlSession.close(); } /** * 删除用户 */ @Test public void deleteCustomer()throws Exception{ //1.读取配置文件 String resource ="mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); //2.获取会话工厂对象 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //3.创建会话对象 SqlSession sqlSession=sqlSessionFactory.openSession(); //4.执行方法 int num=sqlSession.delete("com.itheima.mapper.CustomerMapper.deleteCustomer", 1); //5.返回结果 if(num>0) { System.out.println("删除成功!"); }else { System.out.println("删除失败!"); } //6.提交事务 sqlSession.commit(); //7.关闭sqlSession对象 sqlSession.close(); }