- 原始Dao开发方法
- 创建Mapping文件
<?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="Test2">
<!--根据id查找用户-->
<select id="queryCustomerById" parameterType="Integer" resultType="demo2.Customer">
SELECT * FROM customer WHERE cust_id=#{cust_id}
</select>
<!--查询所有用户-->
<select id="queryAll" resultType="demo2.Customer">
SELECT * FROM customer;
</select>
<!--根据用户名模糊查询用户-->
<select id="queryByName" resultType="demo2.Customer" parameterType="String">
SELECT * FROM customer WHERE cust_name LIKE #{cust_name}
</select>
<!--添加用户-->
<insert id="addCustomer" parameterType="demo2.Customer">
<!--返回新增加记录的主键-->
<selectKey keyColumn="cust_id" keyProperty="cust_id" order="AFTER" resultType="Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO customer (cust_name,cust_profession,cust_phone,email) VALUES
(#{cust_name},#{cust_profession},#{cust_phone},#{email})
</insert>
<!--更新用户-->
<update id="updateeCustomerById" parameterType="demo2.Customer">
UPDATE customer SET cust_name=#{cust_name}where cust_id=#{cust_id}
</update>
<!--删除用户-->
<delete id="deleteById" parameterType="Integer">
DELETE FROM customer WHERE cust_id=#{cust_id}
</delete>
</mapper>
- 将Mapping加载到SqlMappingConfig中
<?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">
<!--使用jdbc事务管理-->
<transactionManager type="JDBC"/>
<!--配置数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/development"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="demo2/Mapping"/>
</mappers>
</configuration>
- 创建customer表的ORM映射POJO类
@Setter@Getter
public class Customer {
private Integer cust_id;
private String cust_name;
private String cust_profession;
private String cust_phone;
private String email;
@Override
public String toString() {
return "Customer{" +
"cust_id=" + cust_id +
", cust_name='" + cust_name + '\'' +
", cust_profession='" + cust_profession + '\'' +
", cust_phone='" + cust_phone + '\'' +
", email='" + email + '\'' +
'}';
}
}
- 创建Dao接口
public interface CustomerDao {
//添加用户
public void save(Customer customer);
// 查询用户
public Customer query(Integer id);
// 更新用户
public void update(Customer customer);
// 删除用户
public void delete(Integer id);
}
- 实现Dao接口
public class CustomerDaoImpl implements CustomerDao {
private SqlSessionFactory sqlSessionFactory;
public CustomerDaoImpl(SqlSessionFactory sqlSessionFactory){
this.sqlSessionFactory=sqlSessionFactory;
}
@Override
public void save(Customer customer) {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.insert("addCustomer", customer);
sqlSession.commit();
sqlSession.close();
}
@Override
public Customer query(Integer id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
Customer customer = sqlSession.selectOne("queryCustomerById", id);
sqlSession.close();
return customer;
}
@Override
public void update(Customer customer) {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.update("updateeCustomerById",customer);
sqlSession.commit();
sqlSession.close();
}
@Override
public void delete(Integer id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("deleteById",id);
sqlSession.commit();
sqlSession.close();
}
}
- 编写测试类
public class test {
private SqlSessionFactory sqlSessionFactory;
public void init() throws IOException {
//1、创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//2、加载SqlMappingConfig配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig");
//3、创建sqlSessionFactory对象
sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
}
@Test
public void test() throws IOException {
this.init();
CustomerDaoImpl customerDaoImpl = new CustomerDaoImpl(this.sqlSessionFactory);
// Customer customer = new Customer();
// customer.setCust_name("刘雷");
// customer.setCust_phone("142635276");
// customer.setCust_profession("教授");
// customer.setEmail("12@abn.com");
// 测试保存
// customerDaoImpl.save(customer);
//测试更新
// Customer customer1 = new Customer();
// customer1.setCust_name("刘大雷");
// customer1.setCust_phone("142636");
// customer1.setCust_profession("教");
// customer1.setEmail("12@abn.com");
// customer1.setCust_id(13);
// customerDaoImpl.update(customer1);
// 测试查询
// Customer customer2 = customerDaoImpl.query(13);
// System.out.println(customer2);
// 测试删除
customerDaoImpl.delete(13);
System.out.println("ok");
}
}
- Mapper动态代理
使用Mapper动态代理开发Dao需要满足以下要求
- Mapping中的namespace必须与Mapper接口类路径一致
- Mapping中的id必须和Mapper接口方法名一致
- Mapping中的parameterType必须和Mapper接口方法参数类型一致
- Mapping中的resultType必须和Mapper接口方法返回值类型一致
实现步骤
- 编写Mapping配置文件
<?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="demo2.CustomerMapper">
<!--根据id查找用户-->
<select id="queryCustomerById" parameterType="Integer" resultType="demo2.Customer">
SELECT * FROM customer WHERE cust_id=#{cust_id}
</select>
<!--查询所有用户-->
<select id="queryAll" resultType="demo2.Customer">
SELECT * FROM customer;
</select>
<!--根据用户名模糊查询用户-->
<select id="queryByName" resultType="demo2.Customer" parameterType="String">
SELECT * FROM customer WHERE cust_name LIKE #{cust_name}
</select>
<!--添加用户-->
<insert id="addCustomer" parameterType="demo2.Customer">
<!--返回新增加记录的主键-->
<selectKey keyColumn="cust_id" keyProperty="cust_id" order="AFTER" resultType="Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO customer (cust_name,cust_profession,cust_phone,email) VALUES
(#{cust_name},#{cust_profession},#{cust_phone},#{email})
</insert>
<!--更新用户-->
<update id="updateeCustomerById" parameterType="demo2.Customer">
UPDATE customer SET cust_name=#{cust_name}where cust_id=#{cust_id}
</update>
<!--删除用户-->
<delete id="deleteById" parameterType="Integer">
DELETE FROM customer WHERE cust_id=#{cust_id}
</delete>
</mapper>
- 编写Mapper接口
package demo2;
import java.util.List;
public interface CustomerMapper {
public Customer queryCustomerById(Integer id);
public List<Customer> queryAll();
public Customer queryByName(String name);
public void addCustomer(Customer customer);
public void updateeCustomerById(Customer customer);
public void deleteById(Integer id);
}
- 编写测试类
public class test {
private SqlSessionFactory sqlSessionFactory;
public void init() throws IOException {
//1、创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//2、加载SqlMappingConfig配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig");
//3、创建sqlSessionFactory对象
sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
}
@Test
public void test1() throws IOException {
this.init();
//1、创建sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//2、加载Mapper接口
CustomerMapper mapper = sqlSession.getMapper(CustomerMapper.class);
//3、调用Mapper中的方法执行sql
Customer customer = mapper.queryCustomerById(5);
System.out.println(customer);
//4、关闭连接,释放资源
// 如果有对数据库进行操作,则需要提交事务
// sqlSession.commit();
sqlSession.close();
}
}
说明:selectOne和selectList
动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据Mapper接口方法的返回值决定的,如果返回List则调用selectList()方法,如果返回单个对象或者简单类型则调用selectOne()方法。