MyBatis 入门开发
来源:互联网 发布:midaspro3离线编辑软件 编辑:程序博客网 时间:2024/06/01 18:59
MyBatis 入门开发 —-基础入门
ONE Goal , ONE Passion !
MyBatis 本是apache的一个开源项目iBatis,Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
MyBatis入门步骤————基于xml文件开发
- 第一步:在classpath下配置SqlMapConfig.xml文件.
<?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> <environments default="development"> // 配置一个数据库连接 <environment id="development"> <transactionManager type="JDBC"/> <!-- 配置数据库连接信息 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/userdb"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> </configuration>
- 第二步:配置mapper.xml文件
通常命名规范为. 实体类名mapper.xml (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"> // namespace在使用接口开发时 有很重要的意义 <mapper namespace="test1"> // 这里写sql语句 <!--根据id 查询--> <select id="findUserById" parameterType="int" resultType="cn.fy.domain.User"> SELECT id,username,birthday,sex,address FROM USER WHERE id = #{id} </select> </mapper>
- 第三步:加载mapper.xml文件,将配置文件配置到SqlMapConfig.xml中.
<configuration> ... // 加载mapper.xml配置文件 <mappers> <!-- 注册userMapper.xml文件, userMapper.xml位于cn.fy.mapping这个包下,所以resource写成cn/fy/mapping/userMapper.xml --> <mapper resource="cn/fy/mapping/userMapper.xml"/> </mappers> </configuration>
- 第四步: 测试
public class MyBatisTest { @Test public void test1(){ SqlSession session = MyBatisUtil.getSession(); // 命名空间.id值 User user = session.selectOne("test1.findUserById", 10); } }
工具类:
public class MyBatisUtil { public static SqlSession getSession() { /** * 注意: * 1. "SqlMapConfig.xml" 在cn.itcast.test 包下找文件. 由于我使用的是maven开发,SqlMapConfig.xml放在了resource中,所以不加 / 也能正常读取 * 2. "/SqlMapConfig.xml" 在class路径下找 */ String config = "SqlMapConfig.xml"; //InputStream is = Resources.getResourceAsStream(config) InputStream is = MyBatisUtil.class.getClassLoader() .getResourceAsStream(config); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); SqlSession session = factory.openSession(); return session; } }
添加
在user.xml中添加sql
<!-- 添加用户 --> <insert id="insertUser" parameterType="cn.fy.domain.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> // 测试 @Test public void insert(){ SqlSession session = MyBatisUtil.getSession(); User user = new User(); user.setUsername("knight"); user.setAddress("河南郑州"); user.setSex("1"); session.insert("test1.insertUser", user); session.commit(); }
—主键的返回—
第一种: mysql 自增主键返回
<insert id="insertUser" parameterType="实体类"> //after 因为自增的主键是在执行完 insert语句后产生的 <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>
- 添加selectKey实现将主键返回
- keyProperty:返回的主键存储在pojo中的哪个属性
- order:selectKey的执行顺序,是相对与insert语句来说,由于mysql的自增原理执行完insert语句之后才将主键生成,所以这里selectKey的执行顺序为after
- resultType:返回的主键是什么类型
- LAST_INSERT_ID():是mysql的函数,返回auto_increment自增列新记录id值。
第二种: Mysql使用 uuid实现主键.
<insert id="insertUser" parameterType="实体类"> <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>
第三种: Oracle使用序列生成主键
<insert id="insertUser" parameterType="实体类"> <selectKey resultType="java.lang.Integer" order="BEFORE" keyProperty="id"> SELECT 自定义序列.NEXTVAL FROM DUAL </selectKey> insert into user(id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address}) </insert>
删除
在user.xml中添加sql
<!-- 删除用户 --> <delete id="deleteUserById" parameterType="int"> delete from user where id=#{id} </delete> @Test public void delete(){ SqlSession session = MyBatisUtil.getSession(); session.delete("test1.deleteUserById", 31); session.commit(); }
修改
在user.xml中添加sql
<!-- 更新用户 --> <update id="updateUser" parameterType="cn.fy.domain.User"> update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id} </update> @Test public void update(){ SqlSession session = MyBatisUtil.getSession(); User user = new User(); user.setId(38); user.setUsername("fy"); user.setAddress("zz"); user.setSex("1"); session.insert("test1.updateUser", user); session.commit(); }
模糊查询
在user.xml中添加sql
<!-- 模糊查询 --> <select id="findUserByUsername" parameterType="java.lang.String" resultType="cn.fy.domain.User"> select * from user where username like '%${value}%' </select> <!-- 根据用户名称模糊查询用户信息列表 resultType:不管结果集记录的数量有多少,resutType指定单条记录所映射的java对象 resultType映射规则是sql查询列名和pojo的属性名必须一致方可完成映射 ${}:表示一个sql拼接符号,相当于字符串的拼接: “SELECT * FROM USER WHERE username LIKE '%” + ${}表示的串 + “%'” ${}:如果接收输入参数是一个简单类型,${} 中只能写value ${}实现sql拼接是无法防止sql注入的。 --> @Test public void dimFind() { SqlSession session = MyBatisUtil.getSession(); List<User> list = session.selectList("test1.findUserByUsername", "关键字"); System.out.println(list); }
#{}和${}的区别
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
建议使用#{}. 但有时必须使用
阅读全文
0 0
- mybatis开发入门
- MyBatis开发入门
- MyBatis 入门开发
- MyBatis 入门开发 ----配置文件
- springMvc+ibatis+mybatis入门开发
- MyEclipse开发MyBatis入门程序
- MyBatis 入门开发 ----Mapper接口开发
- mybatis简单的入门开发步骤
- mybatis入门---helloworld程序开发步骤
- mybatis简单的入门开发步骤
- mybatis入门--mapper代理方式开发
- MyBatis 入门开发 ----输入,输出参数
- Mybatis入门到精通-开发Dao方法
- Spring boot入门,整合mybatis开发案例
- mybatis入门(二)——mybatis开发项目五部曲
- MyBatis入门
- MyBatis 入门
- myBatis入门
- 中国有嘻哈:网易云、虾米音乐歌词爬虫项目分享
- ZOJ 1085 Alien Security(SPFA+dfs)
- A Bug's Life-----分类并查集
- 【Java进阶-Java动态代理与AOP】04 实现InvocationHandler的invoke方法
- P1939 【模板】矩阵加速(数列)
- MyBatis 入门开发
- 单片机中断详讲
- hdu 5532 Almost Sorted Array(LIS)
- HDU-1079 Calendar Game(找规律,博弈)
- Activity
- Struts2创建项目1
- uva 1608(分治 + 中途相遇法)
- E
- 机器学习之Grid World的SARSA算法解析