MyBatis环境的搭建和配置(一)

MyBatis简介

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动创建connection创建statement手动设置参数结果集检索 等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

搭建Mybatis环境的步骤

  • 添加jar包
    在这里插入图片描述

  • 创建数据库,创建数据表。
    要熟练掌握最基本的Sql语句。

  • 创建Mybatis的全局配置文件(xxx.xml)
    因为该文件是整个项目共享的,所以将他存放在类路径下面。
    注意:1.不是只有src是类路径,对于一个普通文件夹,通过右键–>use a source folder,也可以成为类路径文件夹,同样会存放在项目的bin目录下。
    2 .就全局配置文件的名称也是自定义的,这没有什么限制,只要能保证在加载该文件的时候名称一致就可以了。

  • 定义实体类
    对应数据表,用来接收从数据表中映射出的数据。
    数据表字段名可以不和JavaBean属性对应,因为两个不同的领域,命名规范也不尽相同。
    解决办法:

  • 修改sql语句,给数据表的字段名取别名,使与JavaBean属性一一对应。

  • < resultMap > 之后会详解,这是Mybatis提供的解决字段名和属性不相同的方法

  • 标签< setting name="mapUnderscoreToCamelCase" value="true" /> 开启驼峰命名,不过这种方法只适用于有下划线_ 的情况下转驼峰,到时候随机应变就可以了。

  • 编写Mapper.xml配置文件
    这里实现java代码和sql语句的解耦。用于编写和存放sql语句。至于该文件的位置多数人都建议将他置于对应的JavaBean的同级目录下,我个人喜欢将所有的xml文件都放在conf的构件路径下,完全可以通过文件名辨别对应,

  • 将自定义Mapper.xml注册到全局的xxx.xml文件中
    告诉Mybatis sql语句的存放位置。

  • 测试运行
    1.Junit测试:简单,高效,具有针对性。摒弃之前的main方法作为入口的测试,那样会生成大量的类,给项目做了没有意义的放大,逻辑也会变得混乱。
    2.将公共的步骤抽象成一个(静态)方法。包括加载全局配置文件获取sqlSessionFactory对象获取sqlSession对象…根据实际情况和需要进行不同粒度大小的封装。

Mapper.xml文件的编写(非接口编程)

 <mapper namespace="com.rjxy.mybatis.dao.EmployeeMapper">
		<select id="getEmployeeById"
					parameterType="int"
					resultType="com.rjxy.mybatis.bean.Employee">
			select * from table_employee where id = #{id}
		</select>
</mapper>
  • namespace:命名空间 可以随便命名,但为了后期的维护,一般用JavaBean的全类名+Mapper文件名 的默认规范。

  • id: sql语句的唯一标识,要做到顾名知义。

  • parameterType:传入参数的数据类型,该属性可有可无

  • resultType: 返回值类型,实现数据表到JavaBean的映射。
    值为JavaBean的全类名,这里如果觉得全类名看起来很长,可以为类或包取别 名达到视觉效果。不太建议大家用别名,如果用全类名,我们可以通过Ctrl
    +鼠标左键
    ,完成到对应JavaBean的跳转,也可以作为校验是否对应正确的一种方式,而别名不可以。

  • Sql语句:唯一不同的就是占位符. #{id}就相当于 JDBC 中preparedstatement的?占位符,同样有防止sql注入漏洞的作用。(自行了解一下${id}和#{id}的区别)

Mybatis.xml全局配置文件

所有的配置信息全部写在< configuration >根标签下。
连接数据库:

<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
</environments>
 

连接数据库优化:
db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
<properties resource="dbconfig.properties"></properties> <!--xml标记一般都是双标记-->
<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<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>

注册Mapper.xml

<mappers>
		<mapper resource="EmployeeMapper.xml" /> <!--resource为xml的全路径-->
</mappers>

测试

用SqlSession对象提供的方法来操作sql语句

Employee employee = openSession.selectOne("com.rjxy.mybatis.dao.EmployeeMapper.selectEmp", 1);

selectOne(namespace+selectId,占位符);

int result= sqlSession.delete("com.rjxy.mybatis.dao.EmployeeMapperAnnotation.deleteEmployeeById",2);

delete(namespace+deleteId,占位符);
CRUD都一样,以此类推。

但是,问题来了!!

这样写未必也太麻烦了,每次都得namespace+id一个一个去找,于是有新的解决办法了----- MyBatis接口式编程

loading …

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值