Mybatis学习Day1

                  Mybatis学习Day1

Mybatis框架的认识:

  1.MyBatis是一个ORM的数据库持久化框架

  2.以一定的映射方式,把实体模型和数据库关系的映射

映射的原理:

  1、以一定的映射方式,把实体模型和数据库关系的映射

 

  2ORM框架启动时加载这些映射和数据库配置文件

 

  3ORM通过对最原生jdbc的封装提供更加便利的操作API

 

  4Dao通过ORM提供的便捷API以对象的方式操作数据库关系。

常见的ORM持久化框架:

 

   1.JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现.

 

 

   2.DataJpa:jpa的操作进行封装,让我们使用更加简单.

 

  3.mybatis:本是apache的一个开源项目iBatis,提供的持久层框架包括SQL Maps(Mapper)Dao,允许开发人员直接编写SQL(更好灵活).(Sql操作方式)

mybatis使用:

  1.导包

      

  2.配置xml文件:

      <configuration>
<properties resource="jdbc.properties"></properties>
<!--environments:多环境 -->
<environments default="development">
<!--environment:单个环境-->
<environment id="development">
<!--transactionManager:事务-->
<transactionManager type="JDBC"/>
<!--dataSource:连接池 数据源 POOLEDMybatis内置连接池-->
<dataSource type="POOLED">
<!--四大金刚 驱动 地址 用户名 密码-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--引入sqlxml-->
<mapper resource="cn/itsource/dao/ProductMapper.xml"/>
<mapper resource="cn/itsource/dao/EmployeeMapper.xml"/>
</mappers>
</configuration>

 使用mybatis对数据库进行crud:

  1查询单个数据库信息

    1.1首先创建domain层的表并且提供getset方法以及tostring  还有自己在数据库创建表 

        

      1.2:一个实体类对应一个xml进行操作

        首先进行单查询:xml配置如下

          

 

           其操作相应的代码:

                

         //解析读取xml配置文件
        Reader resource = Resources.getResourceAsReader("Mybatis-config.xml");
        //获取核心对象
        SqlSessionFactoryBuilder Builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory build = Builder.build(resource);
        //获取到他的核心对象session
        SqlSession sqlSession = build.openSession();

        //调用查询方法括号里面填写命名空间的id点下面的sql语句进行查询   

        Product o = sqlSession.selectOne("cn.itsource.dao.ProductMapper.findone", 1L);
        System.out.println(o);
        sqlSession.close();

 

 工具类的抽取:一下代码是crud必备的条件  只有获取到了他的核心对象才能调用mybatis对数据库操作的方法

        //解析读取xml配置文件
        Reader resource = Resources.getResourceAsReader("Mybatis-config.xml");
        //获取核心对象
        SqlSessionFactoryBuilder Builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory build = Builder.build(resource);
        //获取到他的核心对象session
        SqlSession sqlSession = build.openSession();

 定义一个工具类:一定义静态代码块的方式在加载类的时候已经获取到他的核心对象

    public class MyBatisUtil {

    private static SqlSessionFactory factoryBuilder = null;

    static {
    try {
    factoryBuilder = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("Mybatis-config.xml"));
    } catch (Exception e) {
    e.printStackTrace();
     }

     }
    public static SqlSession openSession(){
    return factoryBuilder.openSession();
     }
    }

 sqlSessionFactory:重量级对象  一般一个项目创建一个对象就不要再次创建

  sqlSession:轻量级对象  用到的时候就去创建

 查询多个的配置:

    

添加属性的配置:

     

 

 更改属性的配置:

       

 

 删除的配置:

      

其对数的操作几乎都一样  就是获取他的核心对象 去调用它的方法  传入命名空间的ID点下面的子标签的ID也就是CRUD 需要什么参数传什么参数就行

xml配置文件标签的意思:

    parameterType:接收值的类型

    item:别名

    open:以什么开头

    close:一身结束

     separator:一般就上,号 他就回去给你下面的字段用逗号隔开

      index:一般没什么用 他的意思就是索引

 解决数据跟新丢失问题:

    <update id="dynamicUpdate" parameterType="employee">
          update employee
          <set>
              <if test="name!=null">
                  name=#{name},
              </if>
              <if test="age!=null">
                  age=#{age},
             </if>
              <if test="sex!=null">
                  sex=#{sex},
              </if>
          </set>
          where id=#{id}
      </update>

 测试CRUD代码:

@Test
public void testone()throws Exception{
//获取核心对象
SqlSession sqlSession = MyBatisUtil.openSession();
Product o = sqlSession.selectOne("cn.itsource.dao.ProductMapper.findone", 1L);
System.out.println(o);
sqlSession.close();

}
@Test
public void testall()throws Exception{
//解析读取xml配置文件
Reader resource = Resources.getResourceAsReader("Mybatis-config.xml");
//获取核心对象
SqlSessionFactoryBuilder Builder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = Builder.build(resource);
//获取到他的核心对象session
SqlSession sqlSession = build.openSession();
List<Object> objects = sqlSession.selectList("cn.itsource.dao.ProductMapper.findall");
//遍历打印查询的出啦的数据
objects.forEach(e-> System.out.println(e));
sqlSession.close();
}
@Test
public void testsave()throws Exception{
Product product = productDao.findone(22L);
product.setId(null);
product.setProductName("二狗子");
productDao.save(product);
}
@Test
public void testdelete()throws Exception{
productDao.delect(21L);

}
@Test
public void testupdate()throws Exception{
Product product = productDao.findone(22L);
product.setProductName("听闻尚华");
productDao.updelt(product);

}
@Test
public void testfindall()throws Exception{
List<Product> findall = productDao.findall();
findall.forEach(e-> System.out.println(e));
}

 多添加   和多修改的配置:

 

 测试代码:

 

posted on 2019-08-19 22:15  悠悠紫荆  阅读(171)  评论(0编辑  收藏  举报

导航