mybatis(1)简单配置文件,Dao架构体系以及Dao开发方法

mybatis配置文件:

  1. 导入依赖jar包
  2. 配置SqlMapConfig.xml
  3. 配置log4j.properties,用来输出sql
    4.pojo工程目录下,创建对象
  4. 配置sql查询的映射文件user.xml
  5. 加载映射文件

2.配置SqlMapConfig.xml的细节

<!-- environments环境 default=代表使用哪个环境-->
<environments default="development">
	<environment id="development">
		<!-- 使用jdbc事务管理 -->
		<transactionManager type="JDBC" />
		<!-- 数据库连接池 -->
		<dataSource type="POOLED">
			<property name="driver" value="com.mysql.jdbc.Driver" />
			<property name="url"
				value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
			<property name="username" value="root" />
			<property name="password" value="123456" />
		</dataSource>
	</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
	<mapper resource="mybatis/user.xml"/>
</mappers>

3.配置log4j.properties

Global logging configuration

log4j.rootLogger=DEBUG, stdout

Console output…

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

5.加载映射文件

<!-- parameterType入参的结果数据类型 resultType返回结果的数据类型 #{}占位符,相当于jdbc的? -->

<select id="getUserByid" parameterType="int"
	resultType="com.itheima.mybatis.pojo.User">
	SELECT
	`id`,
	`username`,
	`birthday`,
	`sex`,
	`address`
	FROM
	`user`
	WHERE
	`id`=#{id1}
</select>
<!-- resultType:如果返回结果为集合,只需设置为每一个的数据类型 -->
<select id="getUserByUserName" parameterType="String"
	resultType="com.itheima.mybatis.pojo.User">
	SELECT
	`id`,
	`username`,
	`birthday`,
	`sex`,
	`address`
	FROM
	`user`
	<!-- WHERE username LIKE #{name} -->
	WHERE username LIKE '%${value}%'
</select>

为什么用selectKey标签?
有时候新增一条数据,知道新增成功即可,但是有时候,需要这条新增数据的主键,以便逻辑使用,再将其查询出来明显不符合要求,效率也变低了。

这时候,通过一些设置,mybatis可以将insert的数据的主键返回,直接拿到新增数据的主键,以便后续使用。

当一个表没有唯一标识的时候,可以加UUID即SELECT UUID();
SELECT LAST_INSERT_ID();内置函数,为线程安全的 -->
selectKey:主键返回
keyProperty:user中的主键属性
resultType=:所返回的主键的数据类型
order:在何时运行

<insert id="insertUser" parameterType="com.itheima.mybatis.pojo.User" useGeneratedKeys="false" keyProperty="id">
	<!-- <selectKey keyProperty="id" resultType="int" order="AFTER">
		 SELECT LAST_INSERT_ID()
	</selectKey> -->
	INSERT INTO `user` (
	`username`,
	`birthday`,
	`sex`,
	`address`
	)
	VALUES
	(
	#{username},
	#{birthday},
	#{sex},
	#{address}
	);
</insert>
</mapper>

Dao架构体系


在这里插入图片描述
其中SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例.同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在.在应用运行期间不要重复创建多次,建议使用单例模式.SqlSessionFactory是创建SqlSession的工厂.
SqlSession是MyBatis的关键对象,是执行持久化操作的独享,类似于JDBC中的Connection.它是应用程序与持久层之间执行交互操作的一个单线程对象,也是MyBatis执行持久化操作的关键对象.SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行被映射的SQL语句.每个线程都应该有它自己的SqlSession实例.SqlSession的实例不能被共享,同时SqlSession也是线程不安全的,绝对不能讲SqlSeesion实例的引用放在一个类的静态字段甚至是实例字段中.也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Servlet当中的HttpSession对象中.使用完SqlSeesion之后关闭Session很重要,应该确保使用finally块来关闭它.
关于MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用原文链接:https://blog.csdn.net/u013412772/article/details/73648537

原始Dao开发方法

1 使用原有的user映射文件,不需修改
2 新建个Dao接口
3 新建个DaoImpl接口实现类(与动态代理dao开发的区别)

动态代理dao开发规则

  1. namespace必需是接口的全路径名
  2. 接口的方法名必需与映射文件的sql id一致
  3. 接口的输入参数必需与映射文件的parameterType类型一致
  4. 接口的返回类型必须与映射文件的resultType类型一致

开发步骤
5. 创建UserMapper.xml映射文件(把原来的user.xml复制按开发规则要求修改一下)
6. 创建UserMapper接口(把原来的UserDao.java复制按开发规则要求修改一下)
7. 加载UserMapper.xml

另外:
在这里插入图片描述
properties:
typeAliases:

<!--  单个别名定义不区分大小写<typeAlias type="com.itheima.mybatis.pojo.User" alias="user"/> -->
<!-- 别名包扫描器(推荐使用此方式),整个包下的类都被定义别名,别名为类名,不区分大小写-->
<package name="com.itheima.mybatis.pojo"/>

mappers:

	<mapper resource="mapper/user.xml"/>
	<!-- 第一种方式,加载 resource-->
	
	<!-- 第二种方式,class扫描器要求:
		 1、映射文件与接口同一目录下
		 2、映射文件名必需与接口文件名称一致
	 -->
	<!-- <mapper class="com.itheima.mybatis.mapper.UserMapper"/> -->
	
	<!-- 第三种方式,包扫描器要求(推荐使用此方式):
		 1、映射文件与接口同一目录下
		 2、映射文件名必需与接口文件名称一致
	-->
	<package name="com.itheima.mybatis.mapper"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值