1 抽取MyBatisUtil

其中的sessionFactory必须用同一个对象,不然会空指针异常!

public enum MyBatisUtil {INSTANCE;private static SqlSessionFactory sessionFactory = null;static {try {sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("MyBatis-config.xml"));} catch (IOException e) {e.printStackTrace();}}public SqlSession openSession() {return sessionFactory.openSession();}
}

2 提取db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbcdemo?useSSL=false
usename=root
password=111111

3 配置类型别名

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 引入db.properties文件 --><properties resource="db.properties" /><!-- 为类型起别名 --><typeAliases><typeAlias type="cn.itsource.shopping.domain.Product" alias="Product" /></typeAliases><!-- 环境配置 --><environments default="development"><!-- 连接数据的基本信息 --><environment id="development"><!-- 事务管理器:JDBC的管理机制 --><transactionManager type="JDBC" /><!-- 配置连接池(数据源) --><dataSource type="POOLED"><property name="driver" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${usename}" /><property name="password" value="${password}" /></dataSource></environment></environments><!-- 关联映射文件 --><mappers><mapper resource="cn\itsource\shopping\domain\ProductMapper.xml" /></mappers>
</configuration>

4 列名和属性名不同

当属性名和数据库中的列名不同的时候,可以使用resultMap设置property=”字段名” column=”列名”其中的数据库中的名称不分大小写,字段中的名称严格区分大小写!

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- 映射Product对象和对应表关系的,操作该表/对象的SQL全部都写在这里 -->
<mapper namespace="cn.itsource.shopping.mapper.ProductMapper"><!-- 里面写SQL --><!-- id:唯一的标识,和namespace组成全局的唯一名称cn.itsource.shopping.mapper.ProductMapper.listparameterType:方法的参数类型resultType:返回类型,表中一行记录对应的对象--><!-- 查询所有 --><select id="list" resultMap="productMapping">SELECT * FROM product</select><!-- 查询单个 --><!-- 里面的参数为什么用小long:因为基本类型的别名前面都是小写 --><select id="get" parameterType="long" resultType="Product">SELECT * FROM product where id = #{id}</select><!-- 插入操作  --><insert id="save" parameterType="Product" useGeneratedKeys="true" keyProperty="id">insert into product (productName,brand,supplier,salePrice,costPrice,cutoff,dir_id)values(#{productName},#{brand},#{supplier},#{salePrice},#{costPrice},#{cutoff},#{dir_id})</insert><!-- 修改操作 --><update id="update" parameterType="Product">UPDATE product SET productName = #{productName},brand = #{brand},supplier = #{supplier},salePrice = #{salePrice},costPrice = #{costPrice},cutoff = #{cutoff},dir_id = #{dir_id}WHERE id = #{id}</update><!-- 删除操作 --><delete id="delete" parameterType="long">delete from product where id = #{id}</delete><!-- 解决属性名列名不同的问题 --><!-- 结果映射 --><resultMap type="Product" id="productMapping"><!-- 映射主键列 --><id property="id" column="id"/><!-- 映射非主键列 --><result property="productName" column="productName"/></resultMap>
</mapper>

DAO

public class ProductDAOImpl implements IProductDAO {public void save(Product pro) {SqlSession session = MyBatisUtil.INSTANCE.openSession();try {session.insert("cn.itsource.shopping.mapper.ProductMapper.save", pro);session.commit();} finally {session.close();}}public void delete(Long id) {SqlSession session = MyBatisUtil.INSTANCE.openSession();try {session.update("cn.itsource.shopping.mapper.ProductMapper.delete", id);session.commit();} finally {session.close();}}public void update(Product pro) {SqlSession session = MyBatisUtil.INSTANCE.openSession();try {session.update("cn.itsource.shopping.mapper.ProductMapper.update", pro);session.commit();} finally {session.close();}}public Product get(Long id) {SqlSession session = MyBatisUtil.INSTANCE.openSession();try {return session.selectOne("cn.itsource.shopping.mapper.ProductMapper.get", id);} finally {session.close();}}public List<Product> list() {SqlSession session = MyBatisUtil.INSTANCE.openSession();try {return session.selectList("cn.itsource.shopping.mapper.ProductMapper.list");} finally {session.close();}}

DAO的实现接口

import java.util.List;import cn.itsource.shopping.domain.Product;public interface IProductDAO {void save(Product pro);void delete(Long id);void update(Product pro);//long id 包装进去productProduct get(Long id);List<Product> list();
}

测试类

private IProductDAO dao = new ProductDAOImpl();@Testpublic void testSave() {Product pro = new Product();pro.setProductName("iphone9s");pro.setBrand("apple");pro.setSupplier("苹果公司");pro.setSalePrice(new BigDecimal("7000"));pro.setCostPrice(new BigDecimal("2000"));pro.setCutoff(0.9);pro.setDir_id(3L);//pro.setId(12L);dao.save(pro);System.out.println(pro);}@Testpublic void testDelete() {dao.delete(24L);}@Testpublic void testUpdate() {Product pro = new Product();pro.setProductName("iphone5s");pro.setBrand("apple9s");pro.setSupplier("苹果公司2");pro.setSalePrice(new BigDecimal("6000"));pro.setCostPrice(new BigDecimal("1000"));pro.setCutoff(0.8);pro.setDir_id(5L);pro.setId(25L);dao.update(pro);}@Testpublic void testGet() {Product pro = dao.get(25L);System.out.println(pro);}@Testpublic void testList() {List<Product> list = dao.list();for (Product p : list) {System.out.println(p);}}

商品类对象

public class Product {private Long id;private String productName;private String brand;private String supplier;private BigDecimal salePrice;private BigDecimal costPrice;private Double cutoff;private Long dir_id;//分类编号public Long getId() {return id;}public String getProductName() {return productName;}public String getBrand() {return brand;}public String getSupplier() {return supplier;}public BigDecimal getSalePrice() {return salePrice;}public BigDecimal getCostPrice() {return costPrice;}public Double getCutoff() {return cutoff;}public Long getDir_id() {return dir_id;}public void setId(Long id) {this.id = id;}public void setProductName(String productName) {this.productName = productName;}public void setBrand(String brand) {this.brand = brand;}public void setSupplier(String supplier) {this.supplier = supplier;}public void setSalePrice(BigDecimal salePrice) {this.salePrice = salePrice;}public void setCostPrice(BigDecimal costPrice) {this.costPrice = costPrice;}public void setCutoff(Double cutoff) {this.cutoff = cutoff;}public void setDir_id(Long dir_id) {this.dir_id = dir_id;}public String toString() {return "Product [id=" + id + ", productName=" + productName + ", brand=" + brand + ", suppliet=" + supplier+ ", salePrice=" + salePrice + ", costPrice=" + costPrice + ", cutoff=" + cutoff + ", dir_id=" + dir_id+ "]";}

MyBatis的优化相关推荐

  1. MyBatis之优化MyBatis配置文件中的配置

    MyBatis之优化MyBatis配置文件中的配置 2017/9/30 MyBatis配置文件很重要,首先我们来看看MyBatis配置文件中的内容和顺序: 文件目录结构如下: 1.<proper ...

  2. mybatis的mapper.xml文件中含有中文注释时运行出错,mybatis配置优化和别名优化 mybatis配置之映射器说明

    记录一个发现的小问题,刚刚在UserMapper.xml文件中有一段中文注释掉的内容: <!-- <resultMap id="Usermap" type=" ...

  3. MySql+Mybatis+Druid 优化之MyBatis批量删除、更新

    业务需求:一次更新/删除多条数据,通常有两种方式: (1)在业务代码中循环遍历,逐条删除,业务清晰: (2)在sql语句中,循环删除,只操作一次数据库,这个分为两种方式: 方式A:通过循环一个id列表 ...

  4. Mybatis mapper代理SqlMapConfig.xml配置详解

    SqlMapConfig.xml是mybatis的全局配置文件: 1.mapper映射配置 >配置mapper的另外一种方式: <mappers> <mapper resour ...

  5. Mybatis入门程序

    Mybatis入门:log4j配置.全局配置.mapper配置.测试类四部分 >log4j配置 #info,error. log4j.rootLogger=debug,stdout # log4 ...

  6. hibernate的查询条件lt_鱼与熊掌得兼:Hibernate与Mybatis共存

    架构师(JiaGouX)我们都是架构师! 架构未来,你来不来? 很长一段时间,网上有很多关于Hibernate与Mybatis孰优孰劣的争论,两个阵营的人谁也不能说服谁,每个人的理由都很有道理.今天, ...

  7. MyBatis框架(IDEA-Maven篇)---从小白到入门

    目录 1.架构介绍(纯理论,可跳过) 1.1三层架构 1.2 MyBatis框架 1.2.1 什么是MyBatis框架 1.2.2 MyBatis可以做什么 2.使用MyBatis 2.1 安装 2. ...

  8. MyBatis详细笔记

    导学 文章目录 导学 一.MyBatis介绍 1. 什么是框架? 2. 什么是ORM框架? 3. 什么是MyBatis? 二.MyBatis入门 1. 环境搭建 2. 创建持久层接口和映射文件 3. ...

  9. mybatis中的foreach条件参数过多时,#和$效率比较

    背景 最近对mybatis的in查询做优化时,看到一个有趣的方法,使用外部拼接好查询条件,然后用$符合,直接替代了mybatis内部foreach,特地在本地上做个评测 看到一篇文章,当foreach ...

最新文章

  1. three相机在模型上_基于 three.js 的 3D 粒子动效实现
  2. 江苏关于领取软考2021年上半年合格证书的通知
  3. hdu 3046(最小割最大流)
  4. 显示屏的方向设置问题
  5. 【splunk】仪表盘导入导出
  6. 学水利的想转行计算机,为什么说千万别学水利水电工程?附水利八大院排名2020年(最新)...
  7. tableau度量值计算_Tableau图表界面组成介绍
  8. 信息学奥赛一本通(1405:质数的和与积)
  9. Instance2:login interface
  10. Flink API之Source入门
  11. Grub 启动时的 Error 13: Invalid or unsupported executable 问题的解决
  12. 计算机原理的教学,计算机组成原理教学方法探析
  13. 你知道有哪些超级好用的网盘存储吗?
  14. Mac | 使用 Wineskin 在 Mac 上运行 exe 程序
  15. 什么是HotSpot虚拟机
  16. Android App压力测试
  17. 【PyQt】pyqt加载调用ui界面文件的两种方法
  18. 西安电子科技大学计算机科学与技术排名,西安电子科技大学双一流学科名单2个...
  19. C++:计算对称正定 (SPD) 矩阵的逆矩阵(附完整源码)
  20. 最简 jrtplib 收发数据实例

热门文章

  1. oracle扩容bigfile,Oracle10g BIGFILE表空间带来的好处
  2. 程序员50题(JS版本)(二)
  3. java list对象按照某个属性去重
  4. php输出文件,数组
  5. String str 与 String str=new String() 区别
  6. CentOS 6 下升级安装Mysql 5.5 完整步骤
  7. 关于一个GetLevelDesc函数 的认知问题
  8. [CLR团队公告]CLR基础研究团队,邀请您的加入
  9. 3.数据类型和变量---用Python做数学运算
  10. 10-9-用户登录控制