mybatis
usermapper.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.easytopit.demo.mybatis.mapper.UserMapper"><insert id="insert" useGeneratedKeys="true" keyProperty="id" >INSERT INTO et_user (username, truename, login_time) VALUES(#{username}, #{truename}, #{loginTime});</insert> <update id="update">UPDATE et_user SET username=#{username}, truename=#{truename}, login_time=#{loginTime} WHERE id=#{id}</update> <delete id="delete" parameterType="int">delete from et_user where id=#{id}</delete> <select id="queryAll" resultType="com.easytopit.demo.mybatis.bean.User">SELECT id, username, truename, login_time loginTime FROM et_user LIMIT 10</select><select id="queryAllByPage" parameterType="java.util.HashMap" resultType="com.easytopit.demo.mybatis.bean.User"><!-- SELECT id, username, truename, login_time loginTime FROM et_user LIMIT #{param1}, #{param2} --> SELECT id, username, truename, login_time loginTime FROM et_user LIMIT #{pageOffset}, #{pageSize}</select><select id="query" resultType="com.easytopit.demo.mybatis.bean.User">SELECT id, username, truename, login_time loginTime FROM et_user WHERE id = #{id}</select></mapper>
namespace:
是为了解决相同名字的sql操作问题,有标识的作用
例如如果访问的路径是/add.do,如果namespace为/user,则访问路径为/user/add.do
select id="selectid"
id是为了唯一标识sql语句
resultType=java.util.map
标识当行记录的类型
// 手工查询(根据命名空间 - 命名空间与Mapper接口一致) -> com/easytopit/demo/mybatis/mapper/persistent/UserMapperNS.xml
users = session.selectList("NS.queryAll");
参数的三种方法
1:使用#{0}索引
2:使用参数#{param1} 从1开始
3:注解 @param(“name”)
jdk1.8支持参数注解,其他的不支持 参数名字和param(“”)名字一致
注意事项
#{} 实际上使用的jdbc的?占位符,是安全的
11:41:56.728 [http-bio-8080-exec-10] DEBUG c.e.c.m.AlbumMapper.deletelAlbum - ==> Preparing: delete from ab_album where id = ?
${} 底层实际上使用的替换,要记得加单引号,是不安全的
11:47:29.831 [http-bio-8080-exec-10] DEBUG c.e.c.m.AlbumMapper.deletelAlbum - ==> Preparing: delete from ab_album where id = 67
结果集映射
resulttype
映射一个具体的类
resultmap
先定义一个resultmap,然后映射
多对一映射
相当于先查询一个属性,然后自动使用属性作为参数调用其他的方法,再讲结果返回
column ''deptno ,property='dept',javaType=dept.class,one = @one(select = "命名空间.方法名")
一对多映射
懒加载
设置
需要的时候加载
出现的原因在于,应为一对多情况,有可能出现内存不足,所以当需要的时候,重新发起sql语句
insert selectkey标签
先通过sql语法,查询当前的列的最大值+1,放入到map中,然后insert into语句