Mybatis快速入门

----------------------------------MyBatis----------------------------------------
MyBatis是一款优秀的持久层框架,用于简化JDBC开发

持久层:
  负责将数据保存到数据库的那一层代码
  JavaEE三层架构:表现层、业务层、持久层

框架:
 半成品软件,是一套可重用的、通用的、软件基础代码模型
 在框架的基础上构件软件编写更加高效规范、通用、可扩展


------------------快速入门
1.创建MAVEN工程 导入相应的依赖 日志文件、测试、数据库、mybatis等依赖
2.创建想要操作的数据库中表的对应类,如salary表对应Salary类(com.itheima.pojo.Salary),类中包含salary表中的元素和Getter、Setter、toString的方法
3.在java目录下的resources目录下创建logback、mybatis-config、XxxMapper(如SalaryMapper)等xml文件
  >logback日志文件 百度搜
  >mybatis-config(核心配置文件)和XxxMapper在MyBatis官网有
  >XxxMapper中编写对应表中的sql语句
4.MybatisDemo
  //1.记载mybatis核心配置文件,获取SqlsessionFactory(这三行没有必要记住,MyBatis官网有,用的次数不多,一般只用一遍)
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

  //2.获取Sqlsession对象,用来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

  //3.执行sql
        List<Salary> Salarys = sqlSession.selectList("test.selectAll");

        System.out.println(Salarys);

  //4.释放资源
        sqlSession.close();

----------------Mapper代理开发
1.定义与SQL映射文件同名的Mapper接口,并将Mapper接口和SQL映射文件放在同一目录下
 >在resource下创建目录如(com/itheima/mapper) 注意要用/而不是.

2.设置SQL映射文件的namespace属性为Mapper接口全限定名(namespace="com.itheima.mapper.SalaryMapper")
3.在Mapper接口中定义方法,方法名就是SQL映射文件中的sql语句的id,并保持参数类型和返回值类型一致
4.编码
  1.通过SqlSession的getMapper方法获取Mapper接口的代理对象
  2.调用对应方法完成执行
  SalaryMapper mapper = sqlSession.getMapper(SalaryMapper.class);
        List<Salary> list = mapper.selectAll();

细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载

---------------------------实际操作

//当定义的类中属性名称与数据库中属性名称不同时,会出现值为null的情况

解决方法:
 Mapper.xml中添加标签如:
 <resultMap id="salaryResultMap" type="Salary">
        <result column="数据库中属性名称" property="类中属性名称">
         .
         .
         .
    </resultMap>

然后将<select id="selectAll" resultType="Salary">
        select * from salary;
    </select>

改为<select id="selectAll" resultMap="salaryResultMap">
        select * from salary;
    </select>
  


//#{}:会将其替换为?,即参数占位符,为了防止sql注入
  ${}:拼sql,会存在sql注入问题
  使用时机:参数传递的时候用#{};
            表名或者列名不固定的情况下用${};

  参数类型:parameterType:可以省略
  特殊字符处理:
             1.转义字符
             2.CDATA区:
                <![CDATA[
        
        ]]> 在这个区域写特殊字符 如小于号<


//SQL语句中设置多个参数三种方式:
  1.散装参数:需要使用@Param("SQL中的参数占位符名称")
  2.实体类封装参数
     *只需要保证SQL中的参数名和实体类属性名对应上,即可设置成功
  3.map集合
     *只需要保证SQL中的参数名和map集合的键的名称对应上,即可设置成功

//动态SQL
  SQL语句会随着用户的输入或外部条件的变化而变化,我们成为动态SQL
  
Mybits动态SQL标签
1.<if>:用于判断参数是否有值,使用test属性进行条件判断
  *存在问题:第一个条件不需要逻辑运算符
  *解决方案:
    1)使用恒等式让所有条件格式都一样 where 1=1 and 。。。。
    2)<where>标签替换where关键字
例如:
 select * from user
         <where>
             <if test="id!=null">
                 and id = #{id}
             </if>
            <if test="username!=null">
                and username = #{username}
            </if>
            <if test="password!=null">
                and password = #{password}
            </if>
         </where>
    </select>


2.<foreach>
 <select id="findById" parameterType="list" resultType="user">
        select * from user
     <where>
         <foreach collection="list" open="id in(" close=")" item="id" separator=",">
             #{id};
         </foreach>
     </where>
    </select>

3.sql片段的抽取
    <sql id="selectAll"> select * from user</sql>
    <select id="findAll" resultType="user">
        <include refid="selectAll"></include>
    </select>

从多个条件中选择一个
  choose(when,otherwise):选择,类似于switch(case,defult)


//进行增删改操作之后,需要提交事务否则会自动回滚
  手动提交:
  openSession(false)或openSession()
  sqlSession.commit()
  
   自动提交
   openSession(true)


//返回添加数据的主键
 <insert useGeneratedKeys="true" keyProperty="id">


//核心配置文件深入
1.自定义类型处理器
  1.定义转换类继承类BaseTypeHandle<T>
  2.覆盖4个为实现的方法,其中setNonNullParameter位java程序设置数据到
    数据库的回调方法,getNullableResult为查询时 mysql的字符串类型传换成java的Type类型的方法
  3.在MyBatis核心配置文件中进行注册
  4.测试转换是否正确


//plugins标签
  开发步骤:
   1.导入通用PageHelper坐标
   2.在mybatis核心配置文件中配置PageHelper插件
   3.测试分页数据获取 
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值