- 浏览: 138670 次
文章分类
最新评论
-
wangyudong:
很有帮助的代码实例,测试Spring Boot REST AP ...
1、springboot入门案例helloworld与集成hibernate -
wangyudong:
学习了,的确是一个非常好的Spring boot实例,很快就写 ...
1、springboot入门案例helloworld与集成hibernate
示例一:增删改查
sqlMapConfig.xml
UserMapper.xml
Demo.java
示例二:原始Dao开发方法
UserMapper.xml
UserDao.java
UserDaoImpl.java
Demo.java
示例三:mapper代理方法
UserMapper.xml
UserMapper.java
Demo.java
示例四:动态sql
UserMapper.xml
UserMapper.java
Demo.java
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"> <!-- 1、properties属性 注意:mybatis属性加载顺序 (1)、在properties元素体内定义的属性首先被读取 (2)、读取properties元素中resource或url加载的配置文件,它会覆盖已读取的同名属性 (3)、最后读取parameterType传递的属性,它会覆盖已读取的同名属性 建议:不要在properties元素体内添加任何属性值 在properties文件中定义属性名要有一定的特殊性 2、settings mybatis全局参数设置 3、typeAliases别名设置 --> <configuration> <!-- 加载属性文件 --> <properties resource="dbSources.properties"> <!-- 还可以配置属性名和属性值 --> <!-- <property name="jdbc.password" value="root"/> --> <!-- <property name="value" value="c"/> --> </properties> <typeAliases> <typeAlias type="com.chen.pojo.User" alias="_User"></typeAlias> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="sqlMapper/UserMapper.xml" ></mapper> <mapper resource="sqlMapper/UserMapper2.xml"/> <!-- 通过mapper接口加载单个映射文件 需遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名保持一致 且在一个目录中;前提:使用的是mapper代理方法 --> <!-- <mapper class="com.chen.mapper2.UserMapper"></mapper> --> <!-- 批量加载mapper 指定mapper接口的包名,mybatis自动扫描包下所有mapper接口进行加载 需遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名保持一致 且在一个目录中;前提:使用的是mapper代理方法 --> <mapper class="com.chen.mapper3.UserMapper"></mapper> <package name="com.chen.mapper2"/> </mappers> </configuration>
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.chen.pojo.UserMapper"> <!-- id:标识映射文件中的sql 将sql语句封装到mappedStatement对象中,所以将id称为statement的id parameterType:指定输入参数的类型 #{}表示一个占位符号 resultType:指定sql输出结果 --> <select id="findUserById" parameterType="Long" resultType="_User"> select * from t_user where id=#{id} </select> <!-- resultType:指定就是单条记录所映射的java对象类型 ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接到sql中 使用${}拼接sql,引起sql注入,存在安全隐患不建议使用 ${value}:接收输入的参数的内容,如果传入的类型是简单类型,只能用value --> <select id="findUserByName" parameterType="String" resultType="com.chen.pojo.User"> select * from t_user where username like '%${value}%' </select> <insert id="insertUser" parameterType="com.chen.pojo.User" useGeneratedKeys="true" keyProperty="id"> insert into t_user(username,birthday) values(#{username},#{birthday}) </insert> <!-- 插入记录返回自增长主键方法二 SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用于自增长 keyProperty:将查询到主键值设置到parameterType指定的对象中的属性 order :SELECT LAST_INSERT_ID()执行顺序,相对于insert语句 resultType:SELECT LAST_INSERT_ID()返回结果类型 --> <insert id="insertUser2" parameterType="com.chen.pojo.User" > <selectKey keyProperty="id" order="AFTER" resultType="Long"> SELECT LAST_INSERT_ID() </selectKey> insert into t_user(username,birthday) values(#{username},#{birthday}) </insert> <delete id="deleteUserById" parameterType="Long"> delete from t_user where id=#{id} </delete> <update id="updateUserById" parameterType="com.chen.pojo.User"> update t_user set username=#{username},birthday=#{birthday} where id=#{id} </update> </mapper>
Demo.java
package com.chen.demo; import java.io.IOException; import java.io.Reader; import java.util.Date; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.chen.pojo.User; public class Demo1 { private static SqlSessionFactory sqlSessionFactory= null; static{ String resources = "sqlMapConfig.xml"; try { Reader reader = Resources.getResourceAsReader(resources); sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { test2(); } public static void test1(){ SqlSession session = sqlSessionFactory.openSession(); String sql="com.chen.pojo.UserMapper.findUserById"; User user = (User) session.selectOne(sql, 1L); System.out.println(user); session.close(); } public static void test2(){ SqlSession session = sqlSessionFactory.openSession(); String sql="com.chen.pojo.UserMapper.findUserByName"; List<User> users = session.selectList(sql, "c"); System.out.println(users); session.close(); } public static void test3(){ SqlSession session = sqlSessionFactory.openSession(); String sql="com.chen.pojo.UserMapper.insertUser"; User u = new User(); u.setUsername("冬天");u.setBirthday(new Date()); session.insert(sql, u); session.commit(); System.out.println(u); session.close(); } public static void test4(){ SqlSession session = sqlSessionFactory.openSession(); String sql="com.chen.pojo.UserMapper.insertUser2"; User u = new User(); u.setUsername("春天");u.setBirthday(new Date()); session.insert(sql, u); session.commit(); System.out.println(u); session.close(); } public static void test5(){ SqlSession session = sqlSessionFactory.openSession(); String sql="com.chen.pojo.UserMapper.deleteUserById"; session.delete(sql, 25L); session.commit(); session.close(); } public static void test6(){ SqlSession session = sqlSessionFactory.openSession(); String sql="com.chen.pojo.UserMapper.updateUserById"; String sql2="com.chen.pojo.UserMapper.findUserById"; User u = session.selectOne(sql2, 24L); u.setUsername("冬天的忧伤"); session.update(sql, u); session.commit(); session.close(); } }
示例二:原始Dao开发方法
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.chen.pojo.UserMapper"> <!-- id:标识映射文件中的sql 将sql语句封装到mappedStatement对象中,所以将id称为statement的id parameterType:指定输入参数的类型 #{}表示一个占位符号 resultType:指定sql输出结果 --> <select id="findUserById" parameterType="Long" resultType="_User"> select * from t_user where id=#{id} </select> <!-- resultType:指定就是单条记录所映射的java对象类型 ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接到sql中 使用${}拼接sql,引起sql注入,存在安全隐患不建议使用 ${value}:接收输入的参数的内容,如果传入的类型是简单类型,只能用value --> <select id="findUserByName" parameterType="String" resultType="com.chen.pojo.User"> select * from t_user where username like '%${value}%' </select> <insert id="insertUser" parameterType="com.chen.pojo.User" useGeneratedKeys="true" keyProperty="id"> insert into t_user(username,birthday) values(#{username},#{birthday}) </insert> <!-- 插入记录返回自增长主键方法二 SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用于自增长 keyProperty:将查询到主键值设置到parameterType指定的对象中的属性 order :SELECT LAST_INSERT_ID()执行顺序,相对于insert语句 resultType:SELECT LAST_INSERT_ID()返回结果类型 --> <insert id="insertUser2" parameterType="com.chen.pojo.User" > <selectKey keyProperty="id" order="AFTER" resultType="Long"> SELECT LAST_INSERT_ID() </selectKey> insert into t_user(username,birthday) values(#{username},#{birthday}) </insert> <delete id="deleteUserById" parameterType="Long"> delete from t_user where id=#{id} </delete> <update id="updateUserById" parameterType="com.chen.pojo.User"> update t_user set username=#{username},birthday=#{birthday} where id=#{id} </update> </mapper>
UserDao.java
UserDaoImpl.java
package com.chen.dao; import com.chen.pojo.User; public interface UserDao { public User findUserById(Long id); public void updateUserById(User u); public void deleteUserById(Long id); } package com.chen.dao; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import com.chen.pojo.User; /* * (1)原始Dao开发方法 * 问题:1、dao接口实现类方法存在大量模板方法,设想将模板方法提取出来 * 2、sqlsession调用方法时将statement的id硬编码了( sql="com.chen.pojo.UserMapper.findUserById") * 3、sqlsession调用方法时传入参数类型错误,编译期不会报错 * * 问题:接口方法输入参数只能为一个 * 解决:通过包装类型包含多个参数 * 注意:持久层可以使用包装类型,service层建议不使用包装类型 */ public class UserDaoImpl implements UserDao { private SqlSessionFactory sessionFactory ; public UserDaoImpl() { } public UserDaoImpl(SqlSessionFactory factory){ this.sessionFactory=factory; } public User findUserById(Long id) { SqlSession session = sessionFactory.openSession(); String sql="com.chen.pojo.UserMapper.findUserById"; User u =session.selectOne(sql, id); session.close(); return u; } public void updateUserById(User u) { SqlSession session = sessionFactory.openSession(); String sql="com.chen.pojo.UserMapper.updateUserById"; session.update(sql, u); session.commit(); session.close(); } public void deleteUserById(Long id) { SqlSession session = sessionFactory.openSession(); String sql="com.chen.pojo.UserMapper.deleteUserById"; session.delete(sql, id); session.commit(); session.close(); } }
Demo.java
package com.chen.demo; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.chen.dao.UserDao; import com.chen.dao.UserDaoImpl; import com.chen.pojo.User; public class Demo2_UserDao { private static SqlSessionFactory sqlSessionFactory= null; static{ String resources = "sqlMapConfig.xml"; try { Reader reader = Resources.getResourceAsReader(resources); sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { test1(); } public static void test1(){ UserDao userDao = new UserDaoImpl(sqlSessionFactory); User u = userDao.findUserById(24L); System.out.println(u); } }
示例三:mapper代理方法
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.chen.mapper.UserMapper"> <select id="findUserById" parameterType="Long" resultType="com.chen.pojo.User"> select * from t_user where id=#{id} </select> <select id="findUserByName" parameterType="String" resultType="com.chen.pojo.User"> select * from t_user where username like '%${value}%' </select> <insert id="insertUser" parameterType="com.chen.pojo.User" useGeneratedKeys="true" keyProperty="id"> insert into t_user(username,birthday) values(#{username},#{birthday}) </insert> <insert id="insertUser2" parameterType="com.chen.pojo.User" > <selectKey keyProperty="id" order="AFTER" resultType="Long"> SELECT LAST_INSERT_ID() </selectKey> insert into t_user(username,birthday) values(#{username},#{birthday}) </insert> <delete id="deleteUserById" parameterType="Long"> delete from t_user where id=#{id} </delete> <update id="updateUserById" parameterType="com.chen.pojo.User"> update t_user set username=#{username},birthday=#{birthday} where id=#{id} </update> </mapper>
UserMapper.java
package com.chen.mapper; import java.util.List; import com.chen.pojo.User; /* * (2)、mapper代理方法 * 1、需要编写mapper.xml映射文件 * mapper接口编写需要遵循一些规范,mybatis就可以自动生成mapper接口实现类代理对象 * (1)、在mapper.xml中namespace等于接口mapper.java地址(com.chen.mapper。UserMapper) * (2)、mapper.java接口中的方法名和mapper.xml中statement的id一致 * (3)、mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType一致 * (4)、mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType一致 */ public interface UserMapper { public User findUserById(Long id); public List<User> findUserByName(String name); public void insertUser(User u); public void insertUser2(User u); public void updateUserById(User u); public void deleteUserById(Long id); }
Demo.java
package com.chen.demo; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.chen.mapper.UserMapper; import com.chen.pojo.User; public class Demo3_UserMapper { private static SqlSessionFactory sqlSessionFactory= null; static{ String resources = "sqlMapConfig.xml"; try { Reader reader = Resources.getResourceAsReader(resources); sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { test1(); } private static void test1() { SqlSession session = sqlSessionFactory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); User u = userMapper.findUserById(24L); System.out.println(u); } }
示例四:动态sql
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.chen.mapper3.UserMapper"> <!-- 定义sql片段 经验:基于单表来定义sql片段,可重用性高 在sql片段中不要包括where --> <sql id="query_user"> <if test="userCust != null"> <if test="userCust.username !=null and userCust.username!=''"> and username like #{userCust.username} </if> <if test="userCust.sex !=null and userCust.sex!=''"> and sex=#{userCust.sex} </if> </if> </sql> <select id="findUserList" parameterType="com.chen.pojo.UserQueryVO" resultType="_User"> select * from t_user <where> <if test="userCust != null"> <if test="userCust.username !=null and userCust.username!=''"> and username like #{userCust.username} </if> <if test="userCust.sex !=null and userCust.sex!=''"> and sex=#{userCust.sex} </if> </if> </where> </select> <select id="findUserCount" parameterType="com.chen.pojo.UserQueryVO" resultType="int"> select count(*) from t_user <where> <include refid="query_user"></include> </where> </select> <select id="findUserByIds" parameterType="com.chen.pojo.UserQueryVO" resultType="_User"> select * from t_user <where> <include refid="query_user"></include> <foreach collection="ids" item="id" open="and (" close=")" separator="or"> id =#{id} </foreach> </where> </select> </mapper>
UserMapper.java
package com.chen.mapper3; import java.util.List; import com.chen.pojo.User; import com.chen.pojo.UserQueryVO; public interface UserMapper { public List<User> findUserList(UserQueryVO vo); public int findUserCount(UserQueryVO vo); public List<User>findUserByIds(UserQueryVO vo); }
Demo.java
package com.chen.demo; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.chen.mapper3.UserMapper; import com.chen.pojo.User; import com.chen.pojo.UserCustmer; import com.chen.pojo.UserQueryVO; public class Demo5_SQL { private static SqlSessionFactory sqlSessionFactory= null; static{ String resources = "sqlMapConfig.xml"; try { Reader reader = Resources.getResourceAsReader(resources); sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { test3(); } private static void test1() { SqlSession session = sqlSessionFactory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); UserQueryVO vo = new UserQueryVO(); UserCustmer userCust = new UserCustmer(); userCust.setUsername("%C%"); userCust.setSex("m"); vo.setUserCust(userCust); List<User> list =userMapper.findUserList(vo); System.out.println(list); } private static void test2() { SqlSession session = sqlSessionFactory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); UserQueryVO vo = new UserQueryVO(); UserCustmer userCust = new UserCustmer(); userCust.setUsername("%C%"); userCust.setSex("m"); vo.setUserCust(userCust); int count =userMapper.findUserCount(vo); System.out.println(count); } private static void test3() { SqlSession session = sqlSessionFactory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); UserQueryVO vo = new UserQueryVO(); List<Integer> ids = new ArrayList<Integer>(); ids.add(10); ids.add(12); ids.add(15); UserCustmer userCust = new UserCustmer(); userCust.setUsername("%C%"); vo.setIds(ids); vo.setUserCust(userCust); List<User> list =userMapper.findUserByIds(vo); System.out.println(list); } }
- mybatis_demo02.rar (31.1 KB)
- 下载次数: 6
- mybatis第一天课堂笔记.rar (1021.3 KB)
- 下载次数: 10
发表评论
-
spring data jpa简单案例
2016-03-29 10:16 724pom.xml <project xmlns=&qu ... -
mybatis入门示例传智燕青讲解二----高级映射和二级缓存及整合spring及反向工程
2016-03-15 10:00 839二级缓存及高级映射 sqlMapConfig.xml &l ... -
mybatis入门案例
2016-03-10 14:41 499sqlMapConfiger.xml <?xml v ... -
spring3+mybatis整合案例
2016-02-19 11:21 694pom.xml <project xmlns=&qu ... -
hibernate一对一,一对多,多对一,多对多注解实现案例
2016-02-18 11:01 842pom.xml <project xmlns=&qu ... -
springmvc+hibernate4搭建案例
2016-02-17 09:58 929pom.xml <project xmlns=&qu ... -
hibernate和mybatis比较
2016-01-07 15:13 1238Hibernate简介 Hibernate对数据库结构提供了较 ... -
mybaits简述及原理概述
2016-01-07 11:40 3044Mybatis是一个基于Java的持久层框架。 MyBati ... -
hibernate基本原理
2016-01-04 17:38 3007hibernate是一个基于ORM的持久化框架。它是对jdbc ... -
springmvc与struts2比较
2015-12-30 17:31 833springmvc与struts2比较 1、springmvc ... -
Struts2简述及工作原理
2015-12-30 11:14 10311Struts2是实现MVC(Model-View-Contro ... -
springmvc学习总结01---简述及原理模型
2015-12-28 17:38 14101、用户发起request请求至控制器(Controlle ... -
Spring框架学习总结01----Spring简述
2015-12-28 10:30 1939学习Spring之前,首先要 ... -
spring3.0.7中各个jar包的作用总结
2015-12-28 09:25 927org.springframework.context-3.0 ... -
springmvc非注解方式
2015-11-05 21:36 850springmvc 模型原理 springmvc. ...
相关推荐
#### 一、MyBatis概述 MyBatis是一个优秀的持久层框架,它简化了Java应用程序与关系型数据库交互的复杂性。原名为iBatis,起初作为Apache的一个开源项目,后于2010年迁移到Google Code并更名为MyBatis。 MyBatis的...
【传智燕青 mybatis 课堂笔记】是传智播客燕青老师关于MyBatis这一流行Java持久层框架的精彩教学内容。MyBatis是一个轻量级的框架,它解决了传统的基于JDBC的繁琐代码问题,使得SQL与Java代码能够更加紧密地结合,...
spring mybatis shiro 共6天 8部分 第6部分 传智 燕青主讲 非常好
spring mybatis shiro 共6天 8部分 第5部分 传智 燕青主讲 非常好
spring mybatis shiro 共6天 8部分 第4部分 传智 燕青主讲 非常好
spring mybatis shiro 共6天 8部分 第5部分 传智 燕青主讲 非常好
spring mybatis shiro 共6天 8部分 第3部分 传智 燕青主讲 非常好
spring mybatis shiro 共6天 8部分 第8部分 传智 燕青主讲 非常好
1. 数据库SQL语句:MyBatis的核心功能之一就是将Java对象与数据库中的SQL语句进行映射。在项目中,通常会创建一个`resources`目录下的`sqlmap`文件夹,其中包含`.xml`格式的映射文件,如`UserMapper.xml`。这些文件...
传智播客的mybatis视频,看过以后觉得对自己mybatis框架的学习有很大帮助,整个视频单阅读来说大概是满打满算2天的量,建议学习者用于mybatis框架的入门和进阶。加我云盘好友,有需要的资源我可以免费分享给大家
mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例...
通过本项目示例为大家介绍两种Mybatis实现CRUD的操作 * 使用映射配置文件实现CRUD操作 * 使用注解实现CRUD操作(简单介绍) 通过本项目示例为大家介绍两种Mybatis实现CRUD的操作 * 使用映射配置文件实现CRUD操作 * ...
MyBatis是一款强大的Java持久层框架,它将SQL与Java代码分离,使开发者可以更方便地操作数据库。这篇“MyBatis入门到精通”的学习资料是针对初学者设计的,旨在帮助新手快速掌握MyBatis的基本用法和高级特性。 1. *...
mybatis 入门代码示例
在本入门示例中,我们将了解MyBatis的基本使用流程,包括环境搭建、配置文件解析、Mapper接口定义、SQL映射文件编写、数据访问对象(DAO)实现及事务管理等关键环节。 1. **环境搭建**:首先,你需要在项目中引入...
MyBatis入门 MyBatis是一个优秀的持久层框架,使用XML将SQL与程序解耦,便于维护。MyBatis学习简单,执行高效,是JDBC的延伸。MyBatis提供了数据库增删改查的便捷操作,极大提高了开发效率、统一的编码规则、利于...
Mybatis入门
在本项目中,"使用Spring, Spring MVC和MyBatis实现传智书城"是一个基于Java的Web应用程序,它利用了三个核心框架:Spring、Spring MVC和MyBatis,来构建一个功能完善的在线书店系统。这个项目是一个Eclipse工程,...
【传智mybatis MVC教案及笔记 燕青】涵盖了Java Web开发中的核心框架——MyBatis和MVC模式的应用,这些...总的来说,"传智mybatis MVC教案及笔记 燕青"是一份宝贵的资源,可以帮助你系统地掌握Java Web开发的关键技术。