Mybatis基础,开发流程

Mybatis应用于Maven开发流程

  1. 创建数据表

  2. 创建实体类

  3. 创建DAO接口,定义操作方法

    1. dao包中创建StudentDAO接口

public interface SPDao {
    int insertShangPing(ShangPing SP);//新增
    int deleteShangPing(int id);//删除
    boolean updateShangPing(ShangPing SP);//更新
    List<ShangPing> queryShangPing(String name);//模糊查询
    List<ShangPing> queryAll();//查询所有
    ShangPing queryById(int id);//通过id查

    int queryAllInt();//查询所有信息
    List<ShangPing> selectShangPingByPage(@Param("start") int start,@Param("num") int num);//分页
}
  1. 创建DAO接口的映射文件

    1. 在resources目录下新建StudentDaoMapper.xml

    2. 在mapper.xml映射文件中定义 StudentDAO接口的方法的SQL

<!--查询所有-->
<select id="queryAll"  resultType="Utility.ShangPing">
    select *
    from shangcheng
</select>
  1. 将映射文件添加到MyBatis主配置文件

<mappers>
    <mapper resource="mappers/SPMapper.xml"></mapper>
</mappers>
  1. 测试MyBatis操作数据库

    1. 创建MyBatis工具类

public class MybatisUtil {
    private static SqlSessionFactory factory;
    private static final ThreadLocal<SqlSession> LOCAL = new ThreadLocal<>();
    static {
        try {
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            //创建工厂的工厂
            InputStream inputStream = Resources.getResourceAsStream("mybatis-conf.xml");
            //通过流读取配置文件
            factory = builder.build(inputStream);
            //创建工厂
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    public static SqlSessionFactory getFactory(){
        return factory;
    }
    public static SqlSession getSession(){  //不给参数默认是false ;手动提交
        return getSession(false);
    }
    public static SqlSession getSession(boolean isAutocommit) {//true :就是自动提交事务

        SqlSession session = LOCAL.get();//返回当前线程 默认是null
        if (session == null){//创建
            session = factory.openSession(isAutocommit);
            LOCAL.set(session);//储存当前线程的值
        }
        return session;//返回当前线程的值
    }
    public static <T extends Object>T getMapper(Class<T> c){ //通过反射返回
        SqlSession sqlSession = getSession(true);//设置默认提交
        return sqlSession.getMapper(c);
    }
}

 事务管理

当数据库更新操作执行完成之后自动提交

通过SqlSessionFactory调用openSession获取SqlSession对象时,可以通过参数设置SqlSession自动提交或手动提交:

  • 如果 SqlSession sqlSession = factory.openSession(true),通过此SqlSession对象获取的dao进行数据库操作,都会自动提交;

  • 如果 SqlSession sqlSession = factory.openSession(false),通过此SqlSession对象获取的dao进行数据库操作需要手动提交;

  1. 单元测试:Test 。在pom.xml导入Junit包

    1. <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.13.1</version>
          <scope>test</scope>
      </dependency>
  2. 测试Mybatis的jdbc操作

1.在dao接口中写 测试方法

public interface SPDao {
    int insertShangPing(ShangPing SP);//新增
    int deleteShangPing(int id);//删除
    boolean updateShangPing(ShangPing SP);//更新
    List<ShangPing> queryShangPing(String name);//模糊查询
    List<ShangPing> queryAll();//查询所有
    ShangPing queryById(int id);//通过id查

    int queryAllInt();//查询所有信息
    List<ShangPing> selectShangPingByPage(@Param("start") int start,@Param("num") int num);//分页
}

 2.在Mapper写查询语句

<!--模糊查询-->
<select id="queryShangPing" parameterType="String" resultMap="spMap">
    select *
    from shangcheng
    where name like concat('%',#{name,jdbcType=VARCHAR},'%')
</select>

 查询集合要指定对应数据

<resultMap id="spMap" type="Utility.ShangPing">
 <id column="id" property="id"></id>
    <result column="name" property="name"></result>
    <result column="price" property="price"></result>
    <result column="type" property="type"></result>
    <result column="datas" property="datas"></result>
</resultMap>

 3.生成Test代码

@Test
public void queryShangPing() {
    List<ShangPing> shangPing = spDao.queryShangPing("测");
    boolean flag = false;
    System.out.println("-------------");
    for (ShangPing sp:shangPing
         ) {
        System.out.println(sp);
    }
    if (shangPing!=null){
        flag=true;
        assertEquals(true,flag);//assertEquals设置预期状态是true 与实际状态flag对比;
//不同会有报错信息
    }
}

 4.Test成功就可以写Services代码了

static SPDao spDao = MybatisUtil.getMapper(SPDao.class);//在当前线程service;获取SPDao的一份实例;每个线程各一份;怎么做到的??

在mybatis工具类中指定了当前访问的线程

private static final ThreadLocal<SqlSession> LOCAL = new ThreadLocal<>();

 5.模糊查询的Service

//模糊查询
public List<ShangPing> queryShangPing(String name) {
    List<ShangPing> shangPing = spDao.queryShangPing(name);
    return shangPing;
}

 5.在servlet获取service方法

List<ShangPing> shangPings = service.queryShangPing(inputname);

6. 由servlet做和前端的交互效果

。。。。

  1. 添加操作的主键回填

当我们向数据表添加一条数据时,主键如果使用的自动增长,在很多业务中需要获取生成的主键值,我们可以使用主键回填的方式将插入到数据库中生成的ID返回到参数对象的属性中

 例如

<!-- useGeneratedKeys 设置添加操作是否需要回填生成的主键-->
<!-- keyProperty 设置生成的主键回填到参数对象的哪个属性 -->
<insert id="insertBook" useGeneratedKeys="true" keyProperty="bookId">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值