MyBatis的优化
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的优化相关推荐
- MyBatis之优化MyBatis配置文件中的配置
MyBatis之优化MyBatis配置文件中的配置 2017/9/30 MyBatis配置文件很重要,首先我们来看看MyBatis配置文件中的内容和顺序: 文件目录结构如下: 1.<proper ...
- mybatis的mapper.xml文件中含有中文注释时运行出错,mybatis配置优化和别名优化 mybatis配置之映射器说明
记录一个发现的小问题,刚刚在UserMapper.xml文件中有一段中文注释掉的内容: <!-- <resultMap id="Usermap" type=" ...
- MySql+Mybatis+Druid 优化之MyBatis批量删除、更新
业务需求:一次更新/删除多条数据,通常有两种方式: (1)在业务代码中循环遍历,逐条删除,业务清晰: (2)在sql语句中,循环删除,只操作一次数据库,这个分为两种方式: 方式A:通过循环一个id列表 ...
- Mybatis mapper代理SqlMapConfig.xml配置详解
SqlMapConfig.xml是mybatis的全局配置文件: 1.mapper映射配置 >配置mapper的另外一种方式: <mappers> <mapper resour ...
- Mybatis入门程序
Mybatis入门:log4j配置.全局配置.mapper配置.测试类四部分 >log4j配置 #info,error. log4j.rootLogger=debug,stdout # log4 ...
- hibernate的查询条件lt_鱼与熊掌得兼:Hibernate与Mybatis共存
架构师(JiaGouX)我们都是架构师! 架构未来,你来不来? 很长一段时间,网上有很多关于Hibernate与Mybatis孰优孰劣的争论,两个阵营的人谁也不能说服谁,每个人的理由都很有道理.今天, ...
- MyBatis框架(IDEA-Maven篇)---从小白到入门
目录 1.架构介绍(纯理论,可跳过) 1.1三层架构 1.2 MyBatis框架 1.2.1 什么是MyBatis框架 1.2.2 MyBatis可以做什么 2.使用MyBatis 2.1 安装 2. ...
- MyBatis详细笔记
导学 文章目录 导学 一.MyBatis介绍 1. 什么是框架? 2. 什么是ORM框架? 3. 什么是MyBatis? 二.MyBatis入门 1. 环境搭建 2. 创建持久层接口和映射文件 3. ...
- mybatis中的foreach条件参数过多时,#和$效率比较
背景 最近对mybatis的in查询做优化时,看到一个有趣的方法,使用外部拼接好查询条件,然后用$符合,直接替代了mybatis内部foreach,特地在本地上做个评测 看到一篇文章,当foreach ...
最新文章
- three相机在模型上_基于 three.js 的 3D 粒子动效实现
- 江苏关于领取软考2021年上半年合格证书的通知
- hdu 3046(最小割最大流)
- 显示屏的方向设置问题
- 【splunk】仪表盘导入导出
- 学水利的想转行计算机,为什么说千万别学水利水电工程?附水利八大院排名2020年(最新)...
- tableau度量值计算_Tableau图表界面组成介绍
- 信息学奥赛一本通(1405:质数的和与积)
- Instance2:login interface
- Flink API之Source入门
- Grub 启动时的 Error 13: Invalid or unsupported executable 问题的解决
- 计算机原理的教学,计算机组成原理教学方法探析
- 你知道有哪些超级好用的网盘存储吗?
- Mac | 使用 Wineskin 在 Mac 上运行 exe 程序
- 什么是HotSpot虚拟机
- Android App压力测试
- 【PyQt】pyqt加载调用ui界面文件的两种方法
- 西安电子科技大学计算机科学与技术排名,西安电子科技大学双一流学科名单2个...
- C++:计算对称正定 (SPD) 矩阵的逆矩阵(附完整源码)
- 最简 jrtplib 收发数据实例
热门文章
- oracle扩容bigfile,Oracle10g BIGFILE表空间带来的好处
- 程序员50题(JS版本)(二)
- java list对象按照某个属性去重
- php输出文件,数组
- String str 与 String str=new String() 区别
- CentOS 6 下升级安装Mysql 5.5 完整步骤
- 关于一个GetLevelDesc函数 的认知问题
- [CLR团队公告]CLR基础研究团队,邀请您的加入
- 3.数据类型和变量---用Python做数学运算
- 10-9-用户登录控制