五:Mybatis的Dao实现:
1,传统手动实现Mapper接口:
Item实体类:(Item.java)
package com.cy.springboot.pojo;
import java.math.BigDecimal;
import java.util.Date;
public class Item {
private Long id; //商品编号
private String title; //标题
private String sellPoint; //买点
private BigDecimal price; //价格
private Integer num; //数量
private String barcode; //条形码
private String image; //图片
private Long cid; //外键,详情ID
private Integer status; //状态 1:正常,2下架
private Date created; //创建时间
private Date updated; //修改时间
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSellPoint() {
return sellPoint;
}
public void setSellPoint(String sellPoint) {
this.sellPoint = sellPoint;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public String getBarcode() {
return barcode;
}
public void setBarcode(String barcode) {
this.barcode = barcode;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public Long getCid() {
return cid;
}
public void setCid(Long cid) {
this.cid = cid;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Date getUpdated() {
return updated;
}
public void setUpdated(Date updated) {
this.updated = updated;
}
@Override
public String toString() {
return "Item [id=" + id + ", title=" + title + ", sell_point=" + sellPoint
+ ", price=" + price + ", num=" + num + ", barcode=" + barcode
+ ", image=" + image + ", cid=" + cid + ", status=" + status
+ ", created=" + created + ", updated=" + updated + "]";
}
}
数据库配置文件:(jdbc.properties)
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/jtdb-small
user=root
password=123456
MyBatis核心配置文件:(sqlMapperConfig.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>
<!-- 通过properties标签,加载外部properties标签 -->
<properties resource="jdbc.properties"></properties>
<!-- 自定义别名 -->
<typeAliases>
<typeAlias type="com.cy.springboot.pojo.Item" alias="Item"></typeAlias>
</typeAliases>
<!-- default="developement":指定默认的环境名称-->
<environments default="developement">
<!-- id="developement":指定当前环境的名称-->
<environment id="developement">
<!-- type="JDBC":指事务管理类型是JDBC-->
<transactionManager type="JDBC"></transactionManager>
<!-- type="POOLED":指定当前数据源类型是连接池 -->
<dataSource type="POOLED">
<!-- 数据源配置的基本参数 -->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="mapper/ItemMapper.xml"></mapper>
</mappers>
</configuration>
Mapper映射文件:(ItemMapper.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">
<mapper namespace="com.cy.springboot.dao.ItemMapper">
<select id="findAll" resultType="Item">
SELECT * FROM tb_item
</select>
</mapper>
Mapper接口:(ItemMapper.java)
package com.cy.springboot.dao;
import com.cy.springboot.pojo.Item;
import java.io.IOException;
import java.util.List;
public interface ItemMapper {
public List<Item> findAll() throws IOException;
}
Mapper接口实现类(ItemMapperImpl.java)
package com.cy.springboot.dao;
import com.cy.springboot.pojo.Item;
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;
/**
* DAO实现传统方式手动书写
*/
public class ItemMapperImpl implements ItemMapper{
@Override
public List<Item> findAll() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapperConfig.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder()
.build(resourceAsStream);
SqlSession sqlSession = build.openSession();
List<Item> item = sqlSession
.selectList("com.cy.springboot.dao.ItemMapper.findAll");
return item;
}
}
Demo测试文件:(ServiceDemo01 )
package com.cy.springboot.test;
import com.cy.springboot.dao.ItemMapper;
import com.cy.springboot.dao.ItemMapperImpl;
import com.cy.springboot.dao.ItemMapperImpl;
import com.cy.springboot.pojo.Item;
import java.io.IOException;
import java.util.List;
public class ServiceDemo01 {
public static void main(String[] args) throws IOException {
ItemMapper itemMapper = new ItemMapperImpl();
List<Item> all = itemMapper.findAll();
for (Item item : all) {
System.out.println(item);
}
}
}
2,动态代理开发(主流方式)
ItemMapper.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">
<mapper namespace="com.cy.springboot.dao.ItemMapper">
<select id="findAll" resultType="Item">
SELECT * FROM tb_item
</select>
<select id="getItem" resultType="Item" parameterType="Sting">
SELECT * FROM tb_item where id = #{id}
</select>
</mapper>
ItemMapper.java:
package com.cy.springboot.dao;
import com.cy.springboot.pojo.Item;
import java.io.IOException;
import java.util.List;
public interface ItemMapper {
public List<Item> findAll() throws IOException;
public Item getItem(String id) throws IOException;
/**
* 代理开发方式:
* 采用Mybatis的代理开发方式实现DAO层开发,这种方式是我们后面进入企业的主流
* Mapper接口开发方式只需要程序员编写Mapper接口(相当于Dao接口),
* 由Mybatis框架根据接口定义创建接口的动态代理对象,
* 代理对象的方法体同上面的Dao接口实现类方法
* Mapper接口开发需要遵循以下规范:
* 1,Mapper.xml文件中的namesspace与mapper接口的全限定名相同
* 命名空间 = 接口全路径名
* 2,Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
* XML中每个SQL的id = 接口方法名
* 3,Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
* XML中SQL语句的parameterType = 接口方法的入参类型
* 4,Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
* XML中的SQL语句的resultType = 接口方法的返回类型
*/
}
ServiceDemo02:
package com.cy.springboot.test;
import com.cy.springboot.dao.ItemMapper;
import com.cy.springboot.pojo.Item;
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;
public class ServiceDemo02 {
public static void main(String[] args) throws IOException {
//加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml");
//创建SqlSession工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//获得Mybatis框架生成的Mapper接口的实现类
ItemMapper mapper = sqlSession.getMapper(ItemMapper.class);
//调用对应实现方法
Item item = mapper.getItem("875724");
//打印结果
System.out.println(item);
//释放资源
sqlSession.close();
}
}
本文只是个人学习内容整理的笔记,如有侵权,即联系870013269@qq.com删除