Mybatis入门附电商项目迭代

Mybatis

环境:

  • JDK1.8
  • Mysql5.1
  • maven 3.5.5
  • eclipse

回顾:

  • JDBC
  • Mysql
  • Java基础
  • maven

简介

1.1 什么是Mybatis?

在这里插入图片描述

  • MyBatis 是一款优秀的持久层框架
  • 它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
  • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
  • 2013年11月迁移到Github。

如何获得MyBatis?

  • maven仓库

    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.5</version>
    </dependency>
    
    

    点击这里

  • Github

  • Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html

  • 点击这里跳转

  • GitHub : https://github.com/mybatis/mybatis-3

  • 点击这里跳转

1.2 持久化

数据持久化

持久化是将程序数据在持久状态和瞬时状态间转换的机制

  • 即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。
  • JDBC就是一种持久化机制。文件IO也是一种持久化机制。
  • 在生活中 : 将鲜肉冷藏,吃的时候再解冻的方法也是。将水果做成罐头的方法也是。

为什么需要持久化服务呢?那是由于内存本身的缺陷引起的

  • 有一些对象,不能让他丢失。

  • 内存断电后数据会丢失**(断电即失瞬时状态)**。

  • 内存过于昂贵,而且维持成本也高,至少需要一直供电吧。

1.3 持久层

什么是持久层?

Dao层 Service层 Controller层…

  • 完成持久化工作的代码块 。
  • 层界限十分明显。

1. 4 为什么要用Mybatis?

  • 帮助程序员讲数据存入到数据库中

  • 方便

  • 传统JDBC代码太过于复杂。简化。框架。自动化。

  • 容易上手

  • 优点

    • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

    • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。

    • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

    • 提供映射标签,支持对象与数据库的orm字段关系映射

    • 提供对象关系映射标签,支持对象关系组建维护

    • 提供xml标签,支持编写动态sql。

电商项目迭代--------Mybatis

思路流程:搭建环境–>导入Mybatis—>编写代码—>测试

  1. 搭建环境:在Mysql数据库中已经完成对表的创建以及插入了一些测试数据。
  2. 导入Mybatis,直接把jar包拖入lib目录
    在这里插入图片描述

(特别注意,此处也要导log4j入包,并完成log4j.properties相关配置,方便做测试)

在这里插入图片描述

log4j.properties相关配置

#log level: off fatal error warn info debug all
log4j.rootCategory=debug,con

#log to console
log4j.appender.con=org.apache.log4j.ConsoleAppender
log4j.appender.con.layout=org.apache.log4j.PatternLayout
log4j.appender.con.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c:%L %m%n 

#log to file
#log4j.appender.proj=org.apache.log4j.DailyRollingFileAppender     
#log4j.appender.proj.File=c:/temp/proj.log     
#log4j.appender.proj.layout=org.apache.log4j.PatternLayout     
#log4j.appender.proj.layout.ConversionPattern=%d-[TS] %p %t %c:%L - %m%n   

 
  1. 编写MyBatis核心配置文件 mybatis-cfg.xml (名字随意名命名)

    可查看官服文档-谷歌浏览器经常打不开

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Configuration 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<environments default="dev">
		<environment id="dev">
			<!-- 事务的管理方式:JDBC(程序自己管理,tomcat下只能使用JDBC),MANAGED(托管,交给服务器管理,支持托管的服务器有jboss/weblogic等) -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接获取方式:POOLED(连接池中获取)、UNPOOLED(每做一次crud操作,都新建一个连接)、JNDI(从JNDI数据源获取) -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>	
				<property name="url" 
                    value="jdbc:mysql://localhost:3306/eshop?useUnicode=true&amp;characterEncoding=utf8"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="org/lanqiao/eshop/mapper/YhbMapper.xml"/>
	</mappers>
</configuration>
  1. 编写Mapper.xml配置文件
    • namespace 十分重要,不能写错!
<?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="org.lanqiao.eshop.mapper.YhbMapper">
	<insert id="add" parameterType="org.lanqiao.eshop.entity.Yhb">
		insert into yhb(yhbh,yhm,pwd,yhnc,yhsf,sex,yhtx,sjh,email,zcsj)
		values(#{yhbh},#{yhm},#{pwd},#{yhnc},#{yhsf},#{sex},#{yhtx},#{sjh},#{email},#{zcsj})
	</insert>
	
	<delete id="deleteById">
		delete from yhb where yhbh = #{yhbh}
	</delete>
	
	<update id="update">
		update yhb set yhm = 'libai';
	</update>
	
	<select id="selectById" resultType="org.lanqiao.eshop.entity.Yhb">
		select * from yhb where yhbh = #{yhbh}
	</select>
	
	<select id="listAll" resultType="org.lanqiao.eshop.entity.Yhb">
		select * from yhb
	</select>
</mapper>


在这里插入图片描述

  1. 编写MyBatis工具类

    可查看官服文档-谷歌浏览器经常打不开

    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;
    
    public class MybatisUtils {
    
       private static SqlSessionFactory sqlSessionFactory;
    
       static {
           try {
               String resource = "mybatis-config.xml";
               InputStream inputStream = Resources.getResourceAsStream(resource);
               sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
          } catch (IOException e) {
               e.printStackTrace();
          }
      }
    
       //获取SqlSession连接
       public static SqlSession getSession(){
           return sqlSessionFactory.openSession();
      }
    
    }
    

    6.java代码编写(获取session),进行CRUD操作

    package org.lanqiao.eshop.service.impl;
    
    import java.io.Serializable;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.ibatis.session.SqlSession;
    import org.lanqiao.eshop.dao.BaseDaoAdapter;
    import org.lanqiao.eshop.dao.impl.YhbDao;
    import org.lanqiao.eshop.entity.Pager;
    import org.lanqiao.eshop.entity.Yhb;
    import org.lanqiao.eshop.service.IBaseService;
    import org.lanqiao.eshop.util.DateUtil;
    import org.lanqiao.eshop.util.MybatisUtils;
    import org.lanqiao.eshop.util.UUIDUtil;
    
    public class YhbService extends BaseDaoAdapter<Yhb> implements IBaseService<Yhb>{
    	YhbDao yhbDao=new YhbDao();
    	
    	@Override
    	public boolean add(Yhb obj) {
    		String yhbh=UUIDUtil.getUuid();
    		String zcsj=DateUtil.getNow(); 
    		obj.setYhbh(yhbh);
    		obj.setZcsj(zcsj);
    		
    		SqlSession sqlSession = MybatisUtils.getSession();
            //org.lanqiao.eshop.mapper.YhbMapper.add 此处要 .add   来锁定YhbMapper.xml中DMl的id
    		int ret = sqlSession.insert("org.lanqiao.eshop.mapper.YhbMapper.add", obj);
    		sqlSession.commit();
    		sqlSession.close();
    		
    		return ret > 0;
    	}
    }
    

    6.测试结果

在这里插入图片描述

​ 对应的数据库,添加成功!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值