SqlSessionFactory
是MyBatis框架中十分重要的对象,它是单个数据库映射关系通过编译后的内存镜像,其主要做用是建立SqlSession。java
SqlSessionFactory
对象的实例能够经过SqlSessionFactoryBuilder对象来构建,而SqlSessionFactoryBuilder则能够经过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例mysql
SqlSessionFactory对象是线程安全的,它一旦被建立,在整个应用执行期间都会存在。若是咱们屡次的建立同一个数据库的SqlSessionFactory,那么此数据库的资源将很容易被耗尽。为此,一般每个数据库都会只对应一个SqlSessionFactory,因此在构建SqlSessionFactory实例时,建议使用单列模式。git
相信同窗们已经了解到,mybatis有xml版与注解版两种形式,那咱们实际开发中使用xml版仍是注解版呢,我只能告诉你,两种版本各有各的优势,能够根据本身的需求再不一样的环境使用不一样的方式。github
一、注解版:简单方便
二、xml版:可维护性高web
在Java或Java Web项目中添加MyBatis框架后,就能对数据表进行CRUD操做了。sql
方法一:能够从官方网站: 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版本的驱动包
session
在src目录下新建com.lomtom.mybatis.entity
包,并在其中建立实体类UserInfo(对应数据表user_info)。UserInfo类包含一些属性(对应数据表user_info的部分字段),以及与之对应的getXXX()和setXXX()方法,还可添加构造方法 。mybatis
固然你若是使用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; }
在resources目录下建立属性文件jdbc.properties,保存数据库的链接信息。
<properties>
是一个配置属性的元素,该元素一般用来将内部的配置外在化,即经过外部的配置来动态的替换内部定义的属性。例如,数据库的链接等属性,就能够经过典型的Java属性文件中的配置来替换,
请根据本身mysql版本,确认以后再食用 一、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 二、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
在resources
目录下建立MyBatis的XML配置文件mybatis-config.xml
,用于加载mysql的链接配置。
<configuration> <!--加载属性文件--> <properties resource="jdbc.properties"></properties> <!--给包中的类注册别名,注册后能够直接使用类名,而不用使用全限定的类名就是不用包含包名)。--> <typeAliases> <package name="com.lomtom.mybatis.entity"/> </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 class="com.lomtom.mybatis.mapper.UserInfoMapperAnnotation"></mapper> </mappers> </configuration>
<typeAliases>
元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。别名的设置与XML配置相关,其使用的意义在于减小全限定类名的冗余。
当POJO类过多时能够指定一个包名,MyBatis 会在包名下面搜索须要的 Java Bean。每个在包 中的 Java Bean,在没有注解的状况下,会使用 Bean 的首字母小写的非限定类名来做为它的别名。如有注解,则别名为其注解值
<environments>
元素用于对环境进行配置。MyBatis的环境配置实际上就是数据源的配置,咱们能够经过<environments>
元素配置多种数据源,即配置多种数据库。
在com.lomtom.mybatis.mapper
包中建立UserInfoMapperAnnotation.java接口,而且加入
/** * @Author: LOMTOM * @Date: 2020/4/26 * @Time: 16:16 * @Email: lomtom@qq.com */ public interface UserInfoMapperAnnotation { /** * 插入 * @param userInfo * @return */ @Insert(" insert into user_info(userName, passWord, regDate)\n" + " values(#{userName},#{passWord}, #{regDate})") int addUserInfo(UserInfo userInfo); /** * 删除 * @param id * @return */ @Delete("delete from user_info where id = #{id}") int deleteUserInfo(Integer id); /** * 获取 * @param id * @return */ @Select("select * from user_info where id = #{id}") UserInfo getUserInfoById(Integer id); /** * 获取所有 * @return */ @Select("select * from user_info") List<UserInfo> getALLUserInfo(); /** * 更新 * @param userInfo * @return */ @Update("update user_info set userName = #{userName}, passWord = #{passWord}, regDate = #{regDate} where id = #{id}") void updateUserInfo(UserInfo userInfo); }
/** * @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(); } }
首先,须要加入必不可少的依赖
<!-- 测试--> <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 testAddUserInfoAnnotation(){ SqlSession sqlSession= MybatisUtils.getSession(); UserInfoMapperAnnotation userInfoMapper = sqlSession.getMapper(UserInfoMapperAnnotation. 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 testGetUserInfoByIdAnnotation(){ SqlSession sqlSession= MybatisUtils.getSession(); UserInfoMapperAnnotation userInfoMapper = sqlSession.getMapper(UserInfoMapperAnnotation. class); System.out.println(userInfoMapper.getUserInfoById(1)); System. out. println ("record has got !"); sqlSession.commit(); sqlSession.close(); } @Test public void testGetAllUserInfoAnnotation(){ SqlSession sqlSession= MybatisUtils.getSession(); UserInfoMapperAnnotation userInfoMapper = sqlSession.getMapper(UserInfoMapperAnnotation. class); System.out.println(userInfoMapper.getALLUserInfo()); System. out. println ("record has got !"); sqlSession.commit(); sqlSession.close(); } @Test public void testUpdateUserInfoAnnotation(){ SqlSession sqlSession= MybatisUtils.getSession(); UserInfoMapperAnnotation userInfoMapper = sqlSession.getMapper(UserInfoMapperAnnotation. 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 testDeleteUserInfoAnnotation(){ SqlSession sqlSession= MybatisUtils.getSession(); UserInfoMapperAnnotation userInfoMapper = sqlSession.getMapper(UserInfoMapperAnnotation. class); int i= userInfoMapper.deleteUserInfo(1); System. out. println (i+ " record has deleted !"); sqlSession.commit(); sqlSession.close(); }
描述:
MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
分析: 这是前面一直强调的mysql驱动包的,必定要根据本身的mysql版本导入相应的mysql驱动包
解决: 个人是 version 8,而我用的是5的驱动包,更改驱动包后解决
关注公众号:博奥思园 ,精彩内容不错失
你的支持是做者最大的动力