mybatis

mybatis:持久层框架,帮助开发人员将数据存入到数据库中,简化复杂的jdbc代码。

1,SQL mapper:SQL映射sql mapper framework for java,把数据库表中的一行数据映射成一个Java对象,这行数据就看作一个对象。操作这个对象,相当于操作表中的数据

2,data access objects(DAOs):数据访问,CRUD

功能:

1,创建connection,statement,resultset对象的能力,你就不用管了

2,执行SQL的能力,你就不用执行了

3,提供了循环SQL,把执行SQL的结果转化为Java对象list集合的能力,以下代码你就不用写了

while(rs.next()){
Student stu = new Student();
stu.setId(rs.getInt("id"));
stu.setNama(rs.getString("name"));
stu.setAge(rs.getInt("age"));
// 从数据库中取出数据转化为student对象,封装到list集合
stuList.add(stu);
}

4,关闭资源的能力,connection等,你就不用管了

它啥都有了,那开发人员干啥活?

开发人员只需要,提供SQL语句,---->mybatis处理SQL---->开发人员得到list集合或Java对象(即表中的数据)

像是一个增强的jdbc,开发人员集中写SQL就哦了,不用关心对象的创建啥的。

优点:

1,SQL和代码分离,提高可维护性

mybatis

1,主要类的介绍

1)Resources:mybatis中的一个类 负责读取主配置文件 inputStream in = Resources.getResourcesAsStream("mybatis.xml")

2)SqlSessionFactoryBuilder:创建SqlSessionFactory对象,即sqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();sqlSessionFactory factory = builder.build(in);

3)SqlSessionFactory:重量级对象,程序创建它耗时较长,使用资源比较多,在整个项目中,有一个就够用了

     SqlSessionFactory接口的实现类DefaultSqlSessionFactory

     SqlSessionFactory作用:获取SqlSession对象,SqlSession sqlSession = factory.openSession();

                         openSession()方法说明:

                         1,openSession() 无参数的 获取非自动提交事务的sqlSession对象

                         2,openSession(boolean) true获取自动提交事务的sqlSession flase 反之而已

4)sqlSession接口定义了操作数据库的方法 如selectOne(),selectList(),insert(),update(),delete(),commit(),rollback()

     使用要求:sqlSession对象不是线程安全的,需要在方法内部调用,在执行SQL语句前,使用sqlSession获取sqlSession对象;执行完毕后,需要关闭它,sqlSession.close();这样保证安全。

三:

1,动态代理:使用sqlSession.getMapper(dao接口.class)获取这个dao接口的对象

2,传入参数:从Java代码中把数据传入到mapper文件的SQL语句中

     1)parameterType:写在mapper文件中的一个属性,表示dao接口中方法的参数的数据类型

     2)一个简单类型的参数

         *简单类型:mybatis把Java基本数据类型和String都叫做简单类型

         *在mapper文件中获取简单类型的一个参数的值,用#{任意字符} 

3,多个参数,使用@Param命名参数

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

      使用 @Param("参数名") String name

      mapper文件:

                         <select * from student where name = #{myname} or age = #{myage}

 

5,# 和 $

     select id from student where id = #{studentId} 的结果 :id=?

     select id from student where id = ${studentId} 的结果 :id=1001  即“where id =”+"1001" 使用的是statement对象执行SQL,效率低

     $可以替换表名或者列名,如果你能确定数据安全,可以使用$

区别:

1,#使用?做占位的,使用preparement执行SQL语句,效率高

2,#可避免SQL注入,更安全

3,$不使用占位符,是字符串连接方式,使用statement执行SQL,效率低

4,$有SQL风险,quefaanqx

5,$可以替换表名或者列名

 

4,mybatis输出结果

mybatis执行力sql语句,得到了Java对象

1)resultType结果类型,指sql语句执行完毕后,数据转化为Java对象,Java类型是任意的

结果类型的:1,类型的全限定名 2,别名 例如:java.lang.Integer别名是int

处理方式:1,mybatis执行sql语句,然后mybatis调用类的无参构造方法,创建对象 2,mybatis把resultType指定列值赋给同名的属性

<select id = " " resultType = "com.*.*.Student">

对等的jdbc

ResultSet rs = executeQuery("select * from student");
while(rs.next()){
    Student student = new Student();
    student.setId(rs.getId("id"));
    student.setName(rs.getName("name"));
}

2)定义 自定义类型 的 别名 1,在mybatis主配志文件中定义,使用<typeAlias>定义 2,在resultType中使用自定义别名

3)resultMap结果映射,指定列名和Java对象的属性的对应关系 1,你自定义列值赋值给那个属性 2,当列名和属性名不一样(idstu和stuid),一定要使用resultMap

     resultMap和resultType不要同时用,二选一

动态SQL

内容是变化的,可以根据条件获取到不同的SQL语句,主要是where部分发生变化

实现是使用mybatis的标签,<if><where><foreach>

1)if是判断条件的 语法<if test="判断Java对象的属性值">sql语句</if>

2)<where>用来包含多个<if>,当多个if有一个成立时,<where>会自动增加一个where关键字,并去掉多余的and,or

3)<foreach>循环Java中的数组,list集合,主要用在SQL的in语句中,学生id时1001,1002,1003的三个学生

select * from student where id in (1001,1002,1003)

public List<Student> selectFor(List<Integer> idList)

List<Integer> list = new ...

list.add(1001)

list.add(1002)

list.add(1003)

dao.selectFor(list)

<foreach collection="" close="" open="" item="" separator="">
    
</foreach>

collection:表示接口中方法参数的类型,如果是数组使用array,如果是list集合使用list

item:自定义的,表示数组和集合成员的变量

open:循环开始时的字符

close:循环结束时的字符

separator:集合成员之间的分隔符

4)SQL代码片段 就是复用一些语法

步骤:

1,先定义<sql id="自定义名称唯一"> SQL语句 表明 字段 等 </sql>

2,再使用 <include refid = "id的值"/>

1,数据库的属性配置文件:把数据库连接信息放到一个单独的文件中,和mybatis主配置问件分开。目的是便于修改保存处理数据库的信息

1)在resource目录中定义一个属性配置文件,例如jdbc.properties,在属性配置文件中定义数据格式是key = value (key一般使用.做多级目录)

2)在mybatis主配置文件,使用<property>指定文件的位置,在需要值的地方使用${}

2,mapper文件,使用package指定路径

pagehelper 数据分页

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值