Mybatis基础整理
来源:互联网 发布:淘宝购物车点不开 编辑:程序博客网 时间:2024/06/06 09:19
Mybatis
- 创建Java工程
- 加入jar包
- 配置log4j.properties
- 在classpath下创建SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 和spring整合后 environments配置将废除--> <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" /> <property name="username" value="root" /> <property name="password" value="123" /> </dataSource> </environment> </environments></configuration>
这是Mybatis的核心配置文件
5. POJO类
6. sql映射文件,在classpath下的sqlmap目录下创建sql映射文件User.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="test"></mapper>
namespace:命名空间,用于隔离sql活动
7. 加载映射文件 ,将User.xml添加在SqlMapConfig.xml中
<mappers> <mapper resource="sqlmap/User.xml"/></mappers>
- 查询
<!-- 根据id获取用户信息 --> <select id="findUserById" parameterType="int" resultType="com.demo.mybatis.po.User"> select * from user where id = #{id} </select>
parameterType:定义输入到sql中的映射类型。#{id}表示使用preparedstatement
resultType:定义结果映射类型
9. 模糊查询
<!-- 自定义条件查询用户列表 --> <select id="findUserByUsername" parameterType="string" resultType="com.demo.mybatis.po.User"> select * from user where username like '%${value}%' </select>
parameter:定义输入到sql中的映射类型,${value}
表示使用参数将${value}
替换,做字符串的拼接
10. #{}
和${}
#{}
表示一个占位符号,通过#{}
可以实现preparedStatement向占位符中设置值,
自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。
如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。 ${}
表示拼接sql串,通过${}
可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}
可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}
括号中只能是value。
11. selectOne(),selectList()
12. 插入
<!-- 添加用户 --> <insert id="insertUser" parameterType="com.demo.mybatis.po.User"> insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert>
- mysql自增主键返回
<insert id="insertUser" parameterType="com.demo.mybatis.po.User"> <!-- selectKey将主键返回,需要再返回 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> select LAST_INSERT_ID() </selectKey> insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}); </insert>
此时去user.getId()就能取得id值了,由于mysql的自增主键是插入后才生成,所以使用AFTER
14. mysql使用uuid实现主键
<insert id="insertUser" parameterType="com.demo.mybatis.po.User"><selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">select uuid()</selectKey>insert into user(id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address})</insert>
- 删除
<!-- 删除用户 --> <delete id="deleteUserById" parameterType="int"> delete from user where id=#{id} </delete>
- 修改
<!-- 更新用户 --> <update id="updateUser" parameterType="com.demo.mybatis.po.User"> update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id} </update>
- SqlSessionFactoryBuilder只需要使用一次,通常以单例模式管理SqlSessionFactory
- 在finally中关闭SqlSession
- Mapper动态代理开发规范
- Mapper.xml中的namespace与mapper接口的类路径相同
- Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
- Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType类型相同
- Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
- Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.demo.mybatis.mapper.UserMapper"><!-- 根据id获取用户信息 --> <select id="findUserById" parameterType="int" resultType="com.demo.mybatis.po.User"> select * from user where id = #{id} </select><!-- 自定义条件查询用户列表 --> <select id="findUserByUsername" parameterType="java.lang.String" resultType="com.demo.mybatis.po.User"> select * from user where username like '%${value}%' </select><!-- 添加用户 --> <insert id="insertUser" parameterType="com.demo.mybatis.po.User"> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> select LAST_INSERT_ID() </selectKey> insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert></mapper>
- mapper接口
Public interface UserMapper { //根据用户id查询用户信息 public User findUserById(int id) throws Exception; //查询用户列表 public List<User> findUserByUsername(String username) throws Exception; //添加用户信息 public void insertUser(User user)throws Exception; }
- 加载UserMapper.xml文件,
<!-- 加载映射文件 --> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers>
修改SqlMapConfig.xml
23. SqlMapConfig.xml自定义别名
<typeAliases> <!-- 单个别名定义 --> <typeAlias alias="user" type="com.demo.mybatis.po.User"/> <!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) --> <package name="com.demo.mybatis.po"/> <package name="onepackage"/></typeAliases>
- Mybatis基础整理
- Mybatis 基础简单归纳整理
- MyBatis整理
- MyBatis整理
- Mybatis整理
- MyBatis基础
- 【MyBatis 基础】
- MyBatis基础
- Mybatis基础
- Mybatis基础
- MyBatis基础
- MyBatis 基础
- MyBatis基础
- Mybatis基础
- Mybatis基础
- MyBatis基础
- mybatis基础
- Mybatis基础
- 傅盛认知三部曲后记:到底什么是认知?
- 已有一个名为“frmadd”的组件。组件的名称必须是唯一的,而且名称必须不区分大小
- Zookeeper实例原生API--删除节点
- 自定义属性
- 70. Climbing Stairs
- Mybatis基础整理
- Converted JNDI name [java:comp/env/spring.liveBeansView.mbeanDomain] not found
- Leetcode 143. Reorder List
- 游戏编程中的人工智能 五 (Python改编)
- Thinkphp5学习(19)关联:一对多
- 一分钟了解“过去完成时”
- mysql更改端口
- java 反射
- C++算法学习——经典的抽象设计——堆—栈模式