Mybatis:
Mybatis是一款半自动的ORM框架,对jdbc进行了轻量级的封装,在执行数据库操作时,需要自己编写sql语句,Mybatis主要
负责对于sql语句中参数的处理以及结果集的封装。
Mybatis架包及中文文档下载地址:Mybatis架包及中文文档,密码:cmek。
Mybatis的使用步骤:
1、导入Mybatis的jar包和jdbc驱动包
2、在src目录下新建一个xml文件,该文件是Mybatis的核心配置文件,文件名自定义
3、在核心配置文件中配置连接数据库的信息(驱动、地址、用户名、密码)
4、使用核心配置文件构建SqlSessionFactory对象,然后通过SqlSessionFactory对象构建SQLSession对象
5、想要对那张表执行数据库操作,在项目中创建该表的实体类对象(类名不需要和表名一致,属性名最好和列名保持一致)
6.新建数据层查询接口,定义数据库操作的抽象方法
7.针对于数据库查询接口,需要定义一个xml文件来完成数据层接口中方法和sql语句的映射,在数据层的接口包中定义该
文件
数据库接口对应的xml文件详细讲解:
1.根标签是<mapper>该标签中有一个属性namespace,该属性用来描述和当前xml文件相对应的是那一个查询接口,namespace的值应该是对应的数据层接口的全限定名(包名+类名)
2.针对于数据层接口中的抽象方法,在mapper标签中需要使用不同的标签来绑定sql语句
查询方法使用select标签
新增方法使用insert标签
更新方法使用update标签
删除方法使用delete标签
使用标签的id属性绑定查询接口中的抽象方法 id值和方法名一致
根据数据库操作的不同在这4个数据库操作标签中有一些可选的属性
SQL语句书写在标签中
resultType:主要用在查询标签中,描述该标签中对应的sql语句执行之后返回的数据类型,resultType可以写任意的java类型
parameterType:定义执行数据操作时传入的数据类型,可以是任意的java类型
注意当数据层的参数只有一个字符串参数时,在xml文件中使用该参数需要使用_parameter这个参数名称来取值
3.如果实体类的属性名称和数据库的字段名称不一致,我们需要手动的配置对象关系映射
<resultMap type="com.entity.Emp" id="empMap">
<result column="realname" property="name" jdbcType="VARCHAR"/>
</resultMap>
使用resultMap标签在标签中设置type属性该属性是映射的实体类类型,id属性表示映射关系的名称,在查询时可以使用这个名称来引用该映射关系
在resultMap标签内部使用result标签描述实体类属性和数据库字段的映射
8、将数据层查询接口对应的xml文件地址在核心配置文件中使用<mappers>标签告诉给mybatis
9、使用SqlSession对象获取数据层查询接口的实现类
10、使用该实现类执行数据层操作
事务管理:
事务是指作为单个逻辑工作单元执行的一系列操作,这一系列操作要么同时成功,要么同时失败
事务的四大特性:原子性 一致性 隔离性 持久性
在java程序中一个业务逻辑通常需要执行多个数据层方法
为了保证一个业务中的操作同时成功或者同时失败,我们需要在业务层引入事务管理
在使用jdbc或者一些数据层框架时,需要合理的提交和回滚事务,通常来讲涉及到数据的增删改操作都需要加入事务的管理
MyBatis Generator插件:
插件的安装:将插件中的features和plugins拷贝到myeclipse的安装目录的dropins文件夹下
打开myeclipse将generatorConfig.xml文件拷贝到任意项目中,右键点击该文件如果出现一个新的选项说明安装成功
使用插件生成实体类,查询接口,查询文件的步骤
1.修改generatorConfig.xml文件的内容
提供jdbc驱动包
<classPathEntry location="当前电脑中jdbc驱动包的地址" />
提供数据库连接信息
<jdbcConnection driverClass="驱动类" connectionURL="数据库地址" userId="用户" password="密码"></jdbcConnection>
生成实体类的标签配置
<javaModelGenerator targetPackage="项目下的包" targetProject="目标项目"></javaModelGenerator>
生成数据层接口的标签配置
<javaClientGenerator type="XMLMAPPER" targetPackage="项目下的包" targetProject="目标项目"></javaClientGenerator>
生成数据层查询文件的标签配置
<sqlMapGenerator targetPackage="项目下的包" targetProject="目标项目"></sqlMapGenerator>
哪些表需要生成实体类一张表对应一个标签
<table tableName="表名" domainObjectName="实体类名"></table>
插件生成数据层接口方法介绍:
int countByExample(XxxExample example);
根据查询条件查询数据总行数
int deleteByPrimaryKey(Integer xx);
根据主键的值删除数据
int insert(Xxx xx);
新增方法传入实体类对象
int insertSelective(Xxx xx);
非空新增方法传入实体类对象(实体类对象中属性值等于null的数据不会保存到数据库中)
List<Xxx> selectByExample(XxxExample example);
根据条件查询数据 返回实体类的集合
Xxx selectByPrimaryKey(Integer xx);
根据主键查询数据 返回实体类对象
int updateByExampleSelective(@Param("record") Xxx xx, @Param("example") XxxExample example);
根据条件非空更新数据(实体类对象中为null的数据不会更新)
int updateByExample(@Param("record") Xxx xx, @Param("example") XxxExample example);
根据条件更新数据(实体类中所有的属性值会全部更新到数据库包括空数据)
int updateByPrimaryKeySelective(Xxx xxx);
根据主键非空更新
int updateByPrimaryKey(Xxx xxx);
根据主键更新
条件对象常用的条件
//单个条件
//条件方法的名称规则
//and+属性名称+条件(条件对应的值)
//等值条件
//example.or().andDeptnameEqualTo("后勤部");
//不等于的条件
//andDeptnameNotEqualTo("");
//大于
//andDeptnoGreaterThan(value);
//大于等于
//andDeptnoGreaterThanOrEqualTo(value);
//小于
//example.or().andDeptnoLessThan(value);
//小于等于
//example.or().andDeptnoLessThanOrEqualTo(value)
//模糊查询 like
//example.or().andDeptnameLike("%值%");
//如果要追加2个或者2个以上的and条件
//example.or().条件一.条件二
//例如 部门编号等于1 并且 部门名称等于人事部 的条件
//example.or().andDeptnoEqualTo(1).andDeptnameEqualTo("技术部");
//如果要追加2个或者2个以上的or条件
//example.or().条件一;
//example.or().条件二;
//例如 部门编号等于1 或者 部门名称等于人事部 的条件
//example.or().andDeptnoEqualTo(4);
//example.or().andDeptnameEqualTo("技术部");
//执行数据层方法传入条件对象
//mapper.deleteByExample(example);
//sqlSession.commit();
//根据条件查询 手动添加分页功能
DeptExample example=new DeptExample();
//条件对象不执行任何方法,表示没有条件
//条件对象中添加2个Integer类型的属性 开始查询位置和查询条数
//在查询接口对应的xml文件中根据条件查询的标签中添加一组判断
//给条件对象的2个分页属性赋值
2.右键xml文件点击新的选项