mybatis
#{}表示一个占位符,通过ognl来读取属性值 ${}表示一个拼接号,将接受到的参数的内容不加任何修饰拼接到sql中。会引用sql注入,所以不建议使用 selectOne表示查询出一条记录进行映射,如果使用selectOne可以实现,那么使用selectList也可以实现(list中只有一个对象) selectList表示查询一个列表记录 select * from user where user like `%${value}%` insert into user(id, userName, password) values(#{id}, #{userName}, #{password}) id是自增的 可以不写 <insert id="addUser" parameterType="com.hust.model.User"> <!-- 只适用自增的主键 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> insert into user(userName, password) values(#{userName}, #{password}) <!--insert into user(id, userName, password) values(#{id}, #{userName}, #{password})--> </insert> uuid <insert id="addUser" parameterType="com.hust.model.User"> <!-- 适用非自增的主键 --> <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> SELECT uuid() </selectKey> insert into user(id, userName, password) values(#{id}, #{userName}, #{password}) </insert> hibearnate:是一个标准的ORM(对象关系映射)框架。入门门槛高,不需要写sql,sql自动生成。 对sql语句进行优化、修改比较困难。 应用场景:适用需求变化不多的中小型项目。 mybatis:专注sql本身,需要程序员自己编写sql语句。sql修改,优化比较方便。它是一个不完全的ORM框架。 mybatis也可以实现映射(输入输出映射) 适用于需求变化较多的项目,比如互联网项目。 mapper代理方法 编写mapper接口(相当于dao接口),需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象 编写mapper.xml映射文件 开发规范 1、mapper.xml namespace 命名空间,作用就是对sql进行分类管理,理解sql隔离 2、mapper.java接口中的方法名和mapper.xml中的statement的id一致 3、mapper.java接口中的方法参数类型、返回类型和mapper.xml中的statement的perameterType、resultType一致。 mapper接口方法的参数只能有一个,如果需要多个参数,则需要封装成一个对象来作为参数 即可以使用包装类型的pojo满足不同的业务方法的需求,但service中建议不要使用包装类型 POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans mybatis默认支持的别名 int long bigDecimal等基本的数据类型 <typeAliases> <!-- 单个别名定义 --> <typeAlias alias="User" type="com.hust.model.User" /> <!-- 批量定义别名,自动定义别名,别名就是类名(首字母大写或小写都可以,通常小写) --> <package name="com.hust.model"/> <package name="com.hust.model"/> </typeAliases> typeHandlers类型处理器 通常mybatis提供的类型处理器能满足日常需求 <configuration> <typeAliases> <!-- 单个别名定义 --> <typeAlias alias="User" type="com.hust.model.User" /> <!-- 批量定义别名,自动定义别名,别名就是类名(首字母大写或小写都可以) --> <package name="com.hust.model"/> <package name="com.hust.model"/> </typeAliases> <mappers> <!-- 通过resource方法一次加载一个映射文件 --> <mapper resource="com/hust/mapping/UserMapper.xml" /> <!-- 通过mapper接口加载映射文件 --> <!-- 必须遵守一些规范:mapper接口类名和mapper.xml映射文件名一致,且在同一个目录中 --> <!-- com.hust.dao.UserMapper.xml com.hust.dao.UserMapper.java --> <mapper class="com.hust.dao.UserMapper"/> <!-- 批量加载mapper 指定mapper接口的包名,自动扫描包下所有mapper。--> <!-- 同样必须遵守 mapper接口类名和mapper.xml映射文件名一致,且在同一个目录中 --> <package name="com.hust.dao"/> </mappers> </configuration>