SqlSessionFactory
是MyBatis框架中十分重要的對象,它是單個數據庫映射關係通過編譯後的內存鏡像,其主要做用是建立SqlSession。java
SqlSessionFactory
對象的實例能夠經過SqlSessionFactoryBuilder對象來構建,而SqlSessionFactoryBuilder則能夠經過XML配置文件或一個預先定義好的Configuration實例構建出SqlSessionFactory的實例mysql
SqlSessionFactory對象是線程安全的,它一旦被建立,在整個應用執行期間都會存在。若是咱們屢次的建立同一個數據庫的SqlSessionFactory,那麼此數據庫的資源將很容易被耗盡。爲此,一般每個數據庫都會只對應一個SqlSessionFactory,因此在構建SqlSessionFactory實例時,建議使用單列模式。git
在MyBatis框架的核心配置文件中,
在映射文件中,
在Java或Java Web項目中添加MyBatis框架後,就能對數據表進行CRUD操做了。sql
方法一:能夠從官方網站: https://github.com/mybatis下載所須要的MyBatis版本。數據庫
方法二:使用maven的直接加入依賴,須要MySQL的驅動包、mybatis的驅動包apache
<!-- 數據庫 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版本的驅動包
安全
在src目錄下新建com.lomtom.mybatis.entity
包,並在其中建立實體類UserInfo(對應數據表user_info)。UserInfo類包含一些屬性(對應數據表user_info的部分字段),以及與之對應的getXXX()和setXXX()方法,還可添加構造方法 。
固然你若是使用lombok能夠不寫他的getter、setter以及constructor。session
/** * @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"/> </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>
元素配置多種數據源,即配置多種數據庫。
在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屬性設置在命名空間中惟一的標識符,用於引用這條語句。
在com.lomtom.mybatis.mapper
包中建立UserInfoMapper.java接口,而且加入
/** * @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); }
/** * @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 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(); } }
描述:
### 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>
描述:
MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
分析: 這是前面一直強調的mysql驅動包的,必定要根據本身的mysql版本導入相應的mysql驅動包
解決: 個人是 version 8,而我用的是5的驅動包,更改驅動包後解決
描述:
### 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>
你的支持是做者最大的動力
關注公衆號:博奧思園 ,精彩內容不錯失