mybatis知识点

映射文件的相关属性 namespace命名空间

作用: 对sql进行分类化管理,理解sql隔离 
注意:使用mapper代理方法开发,namespace有特殊重要的作用

<!-- 需求:通过id查询用户表的记录 --> 
<select id="findUserById" parameterType="int" resultType="com.chaychan.mybatis.po.User"> 
SELECT * FROM USER WHERE id=#{value} </select>

上面代码的解释

id:标识映射文件中的 sql,将sql语句封装到mappedStatement对象中,所以将id称为statement的id

parameterType:指定输入 参数的类型,这里指定int型

resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。

“#{}” 表示一个占位符号

“#{id}” 其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称. ${}的使用

<!-- 通过用户的名称模糊搜索用户,搜索的结果可能有多条 resultType指定就是单条记录所映射的java对象 ${}表示拼接sql串,将接收到的内容不加任何修饰拼接在sql中 使用${}拼接sql,会引起sql注入,比如传入的字符串是sql指令(有一定的风险) 
${value}:接收输入的内容,如果传入的类型是简单类型,${}中只能用value --> 
<select id="findUserByName" parameterType="java.lang.String" resultType="com.chaychan.mybatis.po.User"> 
SELECT * FROM USER WHERE USERNAME LIKE '%${value}%'; 
</select>

以上的模糊搜索会引起sql注入,所以还是使用下面的代码

<select id="findUserByName" parameterType="java.lang.String" resultType="com.chaychan.mybatis.po.User"> 
<!-- SELECT * FROM USER WHERE USERNAME LIKE '%${value}%'; 为了防止sql注入,所以采用下面的方式--> SELECT * FROM USER WHERE USERNAME LIKE #{value}; 
</select>

代码中传入参数替代占位符

List<User> list = sqlSession.selectList("test.findUserByName","%小明%");

插入数据

<!-- 添加用户 parameterType:指定输入参数的类型为pojo(包含用户信息) #{}指定pojo的属性名,就可以接收到相应的属性值,mybatis是通过OGNL获取属性值 --> 
<insert id="insertUser" parameterType="com.chaychan.mybatis.po.User"> 
insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address}) </insert>

插入数据后拿到自增长的主键的值

<insert id="insertUser" parameterType="com.chaychan.mybatis.po.User"> 
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> 
SELECT LAST_INSERT_ID() </selectKey> insert into user(username,birthday,sex,address) 
value(#{username},#{birthday},#{sex},#{address}) </insert>

以上代码的解释

SELECT LAST_INSERT_ID(): 得到刚 insert进去记录的主键值,只适用于自增长主键 
keyProperty: 将查询到的主键值设置到parameterType对应的对象的哪个属性中,上述代码是将主键值设置到User对象的id属性中 
order: SELECT LAST_INSERT_ID()的执行顺序,相对于insert来说的顺序 
resultType: 指定SELECT LAST_INSERT_ID()的结果类型 在插入数据之前通过mysql的uuid()生成主键,然后再将其作为主键值插入

使用mysql的uuid()生成主键 
执行过程: 
首先通过uuid()得到主键,将主键设置到user对象的id属性中 
其次在insert执行时,从user对象中取出id属性值

<insert id="insertUser" parameterType="com.chaychan.mybatis.po.User"> 
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> 
SELECT uuid() </selectKey> insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address}) </insert>

mapper的编写

程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类的代理对象 
开发规范: 
1.在mapper.xml中的namespace等于mapper接口的类的全路径

<mapper namespace="com.chaychan.mybatis.mapper.UserMapper">

2.mapper.java接口中的方法名要和mapper.xml中statement的id一致 
3.mapper.java接口中的方法的输入参数类型要和mapper.xml中statement的parameterType指定的类型一致 
4.mapper.java接口中的方法返回值类型要和mapper.xml中statement的resultType指定的类型一致

如mapper.xml中代码:

<select id="findUserById" parameterType="int" resultType="com.chaychan.mybatis.po.User"> 
SELECT * FROM USER WHERE id=#{value} </select>

mapper接口中的方法:

/**根据id查找用户信息*/ public User findUserById(int id) throws Exception;

定义别名

单个别名的定义

SqlMapConfig.xml中配置User对象全路径对应的别名为user

<!-- 定义别名 --> <typeAliases> <!--单个别名的定义--> <typeAlias type="com.chaychan.mybatis.po.User" alias="user"/> </typeAliases>

mapper.xml中只需使用别名user:

<select id="findUserById" parameterType="int" resultType="user"> SELECT * FROM USER WHERE id=#{value} </select>

批量别名的定义

SqlMapConfig.xml中配置要包名

<!-- 定义别名 --> <typeAliases> <!-- 批量别名的定义 指定包名,mybatis就会自动扫描包中的po类,自动定义别名,别名为类名(首字母大小写都可以) --> <package name="com.chaychan.mybatis.po"/> </typeAliases>

加载映射文件

单个加载映射文件,通过mapper接口加载映射文件

批量加载映射文件,指定mapper接口所在的包名,mybatis会自动加载mapper接口

两种方法都要遵循一定的规范:需要将mapper接口的类名和mapper.xml映射文件名保持一致,且放在同一个目录下

<!-- 加载 映射文件 --> <mappers> <mapper resource="sqlmap/User.xml"/>
<!-- <mapper resource="mapper/UserMapper.xml"/> --> 
<!-- 单个加载映射文件,通过mapper接口加载映射文件 遵循一定的规范:需要将mapper接口的类名和mapper.xml映射文件名保持一致,且放在同一个目录下 --> 
<!-- <mapper class="com.chaychan.mybatis.mapper.UserMapper"/> --> 
<!-- 批量加载映射文件 指定mapper接口所在的包名,mybatis会自动加载mapper接口 遵循一定的规范:需要将mapper接口的类名和mapper.xml映射文件名保持一致,且放在同一个目录 --> 
<package name="com.chaychan.mybatis.mapper"/> 
</mappers>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值