mybatis的运用
jdbcConfig.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/itcastmybatis
jdbc.username=root
jdbc.password=root
sqlMapConfig.xm
<!-- 配置properties 可以在标签内部配置连接数据库的信息。也可以通过属性引用外部配置文件信息 resource属性: 常用的 用于指定配置文件的位置,是按照类路径的写法来写,并且必须存在于类路径下。 url属性: 是要求按照Url的写法来写地址 URL:Uniform Resource Locator 统一资源定位符。它是可以唯一标识一个资源的位置。 它的写法: http://localhost:8080/mybatisserver/demo1Servlet 协议 主机 端口 URI URI:Uniform Resource Identifier 统一资源标识符。它是在应用中可以唯一定位一个资源的。 --> <properties resource="jdbcConfig.properties"></properties> <!--配置环境--> <environments default="mysql"> <!-- 配置mysql的环境--> <environment id="mysql"> <!-- 配置事务 --> <transactionManager type="JDBC"></transactionManager> <!--配置连接池--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </dataSource> </environment> </environments>
自定义别名
<!--使用typeAliases配置别名,它只能配置domain中类的别名 --> <typeAliases> <!--typeAlias用于配置别名。type属性指定的是实体类全限定类名。alias属性指定别名,当指定了别名就不再区分大小写--> <typeAlias type="com.itheima.domain.User" alias="user"></typeAlias> <!-- 用于指定要配置别名的包,当指定之后,该包下的实体类都会注册别名,并且类名就是别名,不再区分大小写--> <!--<package name="com.itheima.domain"></package>--> </typeAliases>
UserDao.xml中配置
<!--保存用户--> <insert id="saveUser" parameterType="UsER"> <!-- 配置插入操作后,获取插入数据的id --> <selectKey keyProperty="userId" keyColumn="id" resultType="int" order="AFTER"> select last_insert_id(); </selectKey> insert into user(username,address,sex,birthday)values(#{userName},#{userAddress},#{userSex},#{userBirthday}); </insert>
mappers(映射器)
<!-- 配置映射文件的位置 --> <mappers> <!--<mapper resource="com/itheima/dao/UserDao.xml"></mapper>--> <!-- package标签是用于指定dao接口所在的包,当指定了之后就不需要在写mapper以及resource或者class了 --> <package name="com.itheima.dao"></package> </mappers>
1:<mapper resource=" " />
使用相对于类路径的资源
如:<mapper resource="com/itheima/dao/UserDao.xml" />
应用场景:指定XML映射配置
2:<mapper class=" " />
使用mapper接口类路径
如:<mapper class="com.itheima.dao.UserDao"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
应用场景:指定注解配置
3:<package name=""/>
注册指定包下的所有mapper接口
如:<package name="cn.itcast.dao"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
应用场景:即可以使用XML配置文件,也可以使用注解。
延迟加载
AccountDao.xml
<!--定义resultMap对象,用来封装账号信息--> <resultMap id="accountMap" type="account"> <id property="id" column="id"></id> <result property="uid" column="uid"></result> <result property="money" column="money"></result> <!--association用来关联对象, property代表加载对象, javaType代表加载对象的数据类型,可以写成com.itheima.domain.User select 属性指定的内容:查询用户的唯一标识,指延迟加载要执行的statement的id 要使用UserDao.xml中的findById完成根据用户id查询用户信息 column 属性指定的内容:用户根据id查询时,所需要的参数的值 --> <association property="user" column="uid" javaType="user" select="com.itheima.dao.UserDao.findById"> </association> </resultMap> <!-- 查询所有账号 --> <select id="findByAccountUser" resultMap="accountMap"> select * from account; </select>
UserDao.xml
<!-- 根据id查询用户 --> <select id="findById" parameterType="INT" resultType="com.itheima.domain.User"> select * from user where id = #{uid} </select>
标签的加载顺序:settings需放到typeAliases的前面
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="jdbcConfig.properties"></properties> <!--需要配置延迟加载策略--> <settings> <!--打开延迟加载的开关--> <setting name="lazyLoadingEnabled" value="true"/> <!--将积极加载改为消息加载,即按需加载--> <setting name="aggressiveLazyLoading" value="false"/> </settings>
我们也可以在AccountDao.xml中使用fethcType属性用来控制延迟检索和立即检索:
fetchType:
eager:立即检索
lazy:延迟检索
<association property="user" javaType="user" select="com.itheima.dao.UserDao.findById" column="uid" fetchType="eager"> </association>
浙公网安备 33010602011771号