SSM学习——mybatis 基本学习

一、概论

1.MyBatis框架Dao代理
	1)sql mapper:sql 映射
		可以把数据库一行数据映射为一个Java对象
	2)Data Access Objects(Daos):数据访问,对数据库进行增删查改
2.作用
	1)提供了创建 Connection,Statement,Resultset 的能力,不用开发人员创建
	2)执行 sql 语句
	3)循环sql,把 sql 的结果转化为 Java 对象,List 集合的能力
	4)关闭资源
	
	总:开发人员只要提供 sql 语句

二、MyBatis框架快速入门

开发步骤:
1.加入相应的依赖——mybatis,mysql
2.创建 Dao 接口:定义操作数据的方法
3.创建 mapper 文件,也叫做 sql 映射文件:写 sql 语句的,和接口中方法对应的 sql 语句
4.创建一个 mybatis 的主配置文件:1)连接数据库   2)指定 mapper 文件的位置
5.使用 mybatis的对象 SqlSession,通过它的方法执行 sql 语句

1.mapper 的文件名和接口名一致
2.namespace 要用 dao 接口的全限定名称
3.id 要用接口相应查询的方法名
4.resultType 要用得到 Java 类型的全限定名称
5.IDEA 不会扫描 mapper 的xml文件,要加相应的插件

<resources>
      <resource>
        <directory>src/main/javadirectory>
        <includes>
          <include>**/*.propertiesinclude>
          <include>**/*.xmlinclude>
        includes>
        <filtering>falsefiltering>
      resource>
    resources>
真鸡儿麻烦?!

三、mybatis 框架 Dao 代理

 1.最原始方式:
   	 String config="Config.xml";
    //读取配置文件
    InputStream in=Resources.getResourceAsStream(config);

    //创建 SqlSessionFactory 对象
    SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
    SqlSessionFactory factory=builder.build(in);

    //获取 SqlSession 对象
    SqlSession sqlSession=factory.openSession();

    //执行相应操作数据方法
    String sqlId= "com.mybatis.dao.RecordDao"+"."+"selectRecords";
    List recordlist=sqlSession.selectList(sqlId);
    
	前三步重复——将前三步封装到一个工具类中 MyBatis

2.传统 Dao 使用方式——将原来写在 main 或者写在 test 函数中的执行代码放在相应 Dao 接口实现类中去,再创建接口实现类
对象调用相关方法执行相关 sql 语句

动态代理

3.Mybatis 动态代理——mybatis 根据 dao 方法调用,获取执行 Sql 语句的信息
       mybatis 根据你的 dao 接口类,创建出一个 dao 接口的实现类,并创建这个类的	对象
       完成 SqlSession 调用方法

代码:      //获取Session对象
       SqlSession sqlSession=MyBatisUtils.getSqlSession();

       //通过动态代理获取接口实现类对象
       RecordDao record=sqlSession.getMapper(RecordDao.class);

       //通过接口实现类调用相关方法
       List records=record.selectRecords();

       for (Record re:records) {
           System.out.println(re);}

参数

4、传入参数:从 Java 代码中把数据传入到 mapper 文件中的 sql 语句中
1)一个简单类型的参数
简单类型:mybatis 把 Java 的基本类型和 String 都叫做简单类型 (包括包装类型)
在 mapper 文件中获取简单类型参数,#{任意字符}

在使用#{}之后,mybatis 执行 sql 是使用的 jdbc 中的 PreparedStatement 对象,即:mybatis 封装了 JDBC 操作,
由 mybatis 执行下面代码:

1.mybatis 创建 Connection,PreparedStatement 对象

String sql="select * from browrecord where id=?"
PreparedStatement pstmt=conn.preparedStatement(sql);
pstmt.setInt(1,3);

2.执行 sql 封装为 resultType 对象

Record record=null;
ResultSet rs=pstmt.executQuery();
while(rs.hasNext()){
    record=new Record();

    record.setbrowId(rs.setInt("browId"));
    record.setbookId(rs.setInt("bookId"));
    record.setbookName(rs.setString("bookName"));
    record.setbrowId(rs.setInt("userId"));
    record.setuserName(rs.setString("userName"));
    record.settime(rs.setInt("time"));
}
return record;

同时用 # 也没有 sql 注入的风险?!



2)多个参数,使用 @Param 命名参数
在接口中形参前面加入 @Param("自定义参数名称"),然后再 mapper 文件中使用文件名称

接口 public List selectMulitParam(@Param("myname") String name,@Param("myage") Integer age)

mapper文件:
    



3)适用对象传参数
接口中 形参填对象
mapper 文件中:
    #{属性名,javaType=类型名称,jdbcType=数据类型} 很少用
    javaType:指 java 中的属性数据类型
    jdbcType:在数据库中的数据类型

    我们使用简化方式:#{属性名} javaType,jdbcType 的值会由 mubatis 通过反射获取,不用提供

4)#{} 与 ${} 区别
#{} 在 JDBC 底层调用 PreparedStatement 可以防止 sql 注入
#${} 在 JDBC 底层调用 Statement,效率比 PreparedStatement 低



5.mybatis 返回输出结果
mybatis 执行了 sql 语句,得到的 Java 对象

1)resultType 结果类型,指 sql 语句执行完毕后,数据转为的 Java 对象
    处理方式:
        1.mybatis 执行 sql 语句,然后 mybatis 调用类的无参构造函数,创建对象。
        2.mybatis 把 ResultSet 【指定列值赋给同名属性】

2)resultMap 结果映射,指定列名和 Java 属性对应关系
    1)你自定义列值赋值给哪个属性
    2)当列名和属性名不一致

    使用:
        1)先定义 resultMap

            
                   colum-列名  property—属性名
            

        2)在 select 标签使用定义的标签

        


6.模糊查询
在 Java 代码中指定 like 的内容

接口:List selectLikeOne(String name)

mapper 文件中: select * from student like #{name}

你可能感兴趣的:(学习笔记,mybatis,mysql)