【mybatis xml】数据层框架应用--Mybatis 基于XML映射文件实现数据的CRUD
使用MyBatis框架进行持久层开发
- MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
- MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索。
- MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
目录
你需要了解的知识点
1、什么是SqlSessionFactory?
SqlSessionFactory是MyBatis框架中十分重要的对象,它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建SqlSession。
SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来构建,而SqlSessionFactoryBuilder则可以通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例
SqlSessionFactory对象是线程安全的,它一旦被创建,在整个应用执行期间都会存在。如果我们多次的创建同一个数据库的SqlSessionFactory,那么此数据库的资源将很容易被耗尽。为此,通常每一个数据库都会只对应一个SqlSessionFactory,所以在构建SqlSessionFactory实例时,建议使用单列模式。
2、MyBatis框架的核心配置文件
在MyBatis框架的核心配置文件中,元素是配置文件的根元素,其他元素都要在元素内配置。
3、mapper映射文件
在映射文件中,元素是映射文件的根元素,其他元素都是它的子元素。
使用
1、MyBatis下载
在Java或Java Web项目中添加MyBatis框架后,就能对数据表进行CRUD操作了。
方法一:可以从官方网站: https://github.com/mybatis下载所需要的MyBatis版本。
方法二:使用maven的直接加入依赖,需要MySQL的驱动包、mybatis的驱动包
<!-- 数据库 start--> <!-- 引入jdbc与mysql依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.18</version> </dependency> <!-- mybatis--> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!-- 数据库 end-->
注意这里的mysql的驱动包,根据你自己安装的mysql版本,使用mysql -V
查询,例如我的是8版本,所以用8版本的驱动包
2、创建实体类
在src目录下新建
com.lomtom.mybatis.entity包,并在其中创建实体类UserInfo(对应数据表user_info)。UserInfo类包含一些属性(对应数据表user_info的部分字段),以及与之对应的getXXX()和setXXX()方法,还可添加构造方法 。
当然你如果使用lombok可以不写他的getter、setter以及constructor。
/** * @Author: LOMTOM * @Date: 2020/4/20 * @Time: 15:12 * @Email: lomtom@qq.com */ @Data public class UserInfo { private Integer id; private String userName; private String passWord; private Date regDate; }
3、创建属性文件jdbc.properties
在resources目录下创建属性文件jdbc.properties,保存数据库的连接信息。
<properties>是一个配置属性的元素,该元素通常用来将内部的配置外在化,即通过外部的配置来动态的替换内部定义的属性。例如,数据库的连接等属性,就可以通过典型的Java属性文件中的配置来替换,
请根据自己mysql版本,确认之后再食用 1、mysql for version 8 jdbc.driverClassName=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/javaweb2?characterEncoding=UTF-8 jdbc.username=root jdbc.password=123456 2、mysql for version 5 jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/javaweb2?characterEncoding=UTF-8 jdbc.username=root jdbc.password=123456
4、创建XML映射配置文件
在
resources目录下创建MyBatis的XML配置文件
mybatis-config.xml,用于加载mysql的连接配置。
<configuration> <!--加载属性文件--> <properties resource="jdbc.properties"></properties> <!--给包中的类注册别名,注册后可以直接使用类名,而不用使用全限定的类名就是不用包含包名)。--> <typeAliases> <package name="com.lomtom.mybatis"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/lomtom/mybatis/mapper/UserInfoMapper.xml"/> </mappers> </configuration>
-
<typeAliases>
元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。别名的设置与XML配置相关,其使用的意义在于减少全限定类名的冗余。
当POJO类过多时可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean。每一个在包 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。若有注解,则别名为其注解值 -
<environments>
元素用于对环境进行配置。MyBatis的环境配置实际上就是数据源的配置,我们可以通过<environments>
元素配置多种数据源,即配置多种数据库。
5、创建SQL映射的XML文件
在
resources包中创建SQL映射的XML文件userInfoMapper.xml。
<mapper namespace="com.lomtom.mybatis.mapper.UserInfoMapper"> <!--数据表 user_info的CRUD操作--> <insert id="addUserInfo" parameterType="com.lomtom.mybatis.entity.UserInfo"> insert into user_info(userName, passWord, regDate) values(#{userName},#{passWord}, #{regDate}) </insert> <delete id="deleteUserInfo" parameterType="int"> delete from user_info where id = #{id} </delete> <update id="updateUserInfo" parameterType="com.lomtom.mybatis.entity.UserInfo"> update user_info set userName = #{userName}, passWord = #{passWord}, regDate = #{regDate} where id = #{id} </update> <select id="getUserInfoById" parameterType="int" resultType="com.lomtom.mybatis.entity.UserInfo"> select * from user_info where id = #{id} </select> <select id="getALLUserInfo" resultType="com.lomtom.mybatis.entity.UserInfo"> select * from user_info </select> </mapper>
在上述SQL映射文件中,
<insert>
元素用于映射插入语句,<delete>
元素用于映射删除语句,<update>
元素用于映射更新语句,<select>
元素用于映射查询语句。
在这些元素中,id属性设置在命名空间中唯一的标识符,用于引用这条语句。
- parameterType属性指定传入这条语句的参数类的完全限定名或别名。
- resultType属性指定从这条语句中返回的期望类型的类的完全限定名或别名,若查询结果是集合,则resultType的值应该是集合所包含的元素类型,而不能是集合本身。
6、创建Mapper接口
在
com.lomtom.mybatis.mapper包中创建UserInfoMapper.java接口,并且加入
- testAddUserInfo()方法
- testGetUserInfoById()方法
- testGetAllUserInfo()方法
- testUpdateUserInfo()方法
- testDeleteUserInfo()方法
/** * @Author: LOMTOM * @Date: 2020/4/20 * @Time: 15:24 * @Email: lomtom@qq.com */ public interface UserInfoMapper { /** * 插入 * @param userInfo * @return */ int addUserInfo(UserInfo userInfo); /** * 删除 * @param id * @return */ int deleteUserInfo(Integer id); /** * 获取 * @param id * @return */ UserInfo getUserInfoById(Integer id); /** * 获取全部 * @return */ List<UserInfo> getALLUserInfo(); /** * 更新 * @param userInfo * @return */ void updateUserInfo(UserInfo userInfo); }
7、编写mybatis工具类
/** * @Author: LOMTOM * @Date: 2020/4/20 * @Time: 15:49 * @Email: lomtom@qq.com */ public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory = null; static { try { Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static SqlSession getSession() { return sqlSessionFactory.openSession(); } }
8、编写测试类
首先,需要加入必不可少的依赖
<!-- 测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
新建Test.java
/** * @Author: LOMTOM * @Date: 2020/4/20 * @Time: 15:44 * @Email: lomtom@qq.com */ public class MybatisTest { @Test public void testAddUserInfo(){ SqlSession sqlSession= MybatisUtils.getSession(); UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper. class); UserInfo userInfo= new UserInfo(); userInfo.setUserName("qq小冰"); userInfo.setPassWord("123"); userInfo.setRegDate(new Date()); int i= userInfoMapper.addUserInfo(userInfo); System. out. println (i+ " record has inserted !"); sqlSession.commit(); sqlSession.close(); } @Test public void testGetUserInfoById(){ SqlSession sqlSession= MybatisUtils.getSession(); UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper. class); System.out.println(userInfoMapper.getUserInfoById(1)); System. out. println ("record has got !"); sqlSession.commit(); sqlSession.close(); } @Test public void testGetAllUserInfo(){ SqlSession sqlSession= MybatisUtils.getSession(); UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper. class); System.out.println(userInfoMapper.getALLUserInfo()); System. out. println ("record has got !"); sqlSession.commit(); sqlSession.close(); } @Test public void testUpdateUserInfo(){ SqlSession sqlSession= MybatisUtils.getSession(); UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper. class); UserInfo userInfo= new UserInfo(); userInfo.setId(1); userInfo.setUserName("qq大冰"); userInfo.setPassWord("123456"); userInfo.setRegDate(new Date()); try { userInfoMapper.updateUserInfo(userInfo); System. out. println ("record has updated !"); }catch (Exception e){ e.printStackTrace(); } sqlSession.commit(); sqlSession.close(); } @Test public void testDeleteUserInfo(){ SqlSession sqlSession= MybatisUtils.getSession(); UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper. class); int i= userInfoMapper.deleteUserInfo(1); System. out. println (i+ " record has deleted !"); sqlSession.commit(); sqlSession.close(); } }
你可能会出现的问题
问题一:找不到mapper映射文件
描述:
### The error may exist in com/lomtom/mybatis/mapper/UserInfoMapper.xml ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/lomtom/mybatis/mapper/UserInfoMapper.xml
分析: idea对目录结构里的存放的文件类型有要求,mapper文件必须放入到resources目录里
解决: 在pom.xml中加入资源解析,**/*.xml 代表src/main/java底下全部目录下的全部xml文件
<build> <!-- 解决读取不到main里面的xml--> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
问题二:mysql客户端版本过低
描述:
MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
分析: 这是前面一直强调的mysql驱动包的,一定要根据自己的mysql版本导入相应的mysql驱动包
解决: 我的是 version 8,而我用的是5的驱动包,更改驱动包后解决
问题三:提示找不到UserInfo
描述:
### The error may exist in com/lomtom/mybatis/mapper/UserInfoMapper.xml ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'com/lomtom/mybatis/mapper/UserInfoMapper.xml'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'UserInfo'. Cause: java.lang.ClassNotFoundException: Cannot find class: UserInfo
分析: 这是因为找不到UserInfo类导致的,如果parameterType是
UserInfo,原则上使用小写开头的就不会报错,如果报错的话需要将其路径写完整,即包名加类名
com.lomtom.mybatis.entity.UserInfo
<insert id="addUserInfo" parameterType="UserInfo"> insert into user_info(userName, passWord, regDate) values(#{userName},#{passWord}, #{regDate}) </insert>
解决:修改parameterType参数
<insert id="addUserInfo" parameterType="com.lomtom.mybatis.entity.UserInfo"> insert into user_info(userName, passWord, regDate) values(#{userName},#{passWord}, #{regDate}) </insert>
写在最后
你的支持是作者最大的动力
关注公众号:博奥思园 ,精彩内容不错失
- 【mybatis xml】数据层框架应用--Mybatis 基于XML映射文件实现数据的CRUD
- MyBatis学习总结(一)---简单配置使用(基于XML方式实现CRUD以及加载配置文件的三种方式)
- MyBatis框架中通过映射文件或实现增删改查操作
- 基于ssm框架对mybatis映射文件的多对一返回类型的junit4单元测试
- Maven工程中mybatis框架的mapper映射文件xml加载不成功的问题
- 使用MyBatis对表执行CRUD操作——基于XML的实现
- 基于MyBatis的数据库切分框架,可实现数据的水平切分和垂直切分。 http://www.makersoft.org
- Mybatis 框架 增删改查操作(CRUD) --XML实现
- MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
- mybatis3.2.7(3.*同适用)框架mybatis-config.xml和实现类配置文件模板
- mybatis基于代理dao实现CRUD(xml实现)
- Mybatis 框架基于注解(annotations)的方式实现增删改查(CRUD)---注解方式
- IDEA的MyBatis框架的Mapper代理加载mapper.xml映射文件报错解决办法
- MyBatis之对表执行CRUD操作——基于XML的实现
- (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
- MyBatis之XML文件配置实现映射器Mapper
- 使用MyBatis对表执行CRUD操作——基于XML的实现
- MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
- Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
- Spring基于XML配置文件的IoC案例——实现单表CRUD