Mybatis(1)---入门篇单表查询
1.Mybatis介紹
MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生類型、接口和 Java 的POJO(Plain Old Java Objects,普通老式 Java 對象)為數據庫中的記錄。
2.Mybatis配置
1.創建工程配置pom.xml
首先在idea中創建Maven工程,構建好項目后會在項目的根目錄發現一個叫做pom.xml的配置文件。
以下是pom.xml的配置
ps: 記得導入jar包喲
2. 創建全局配置文件SqlMapConfig.xml
在下面的配置文件中我已經注釋的很詳細了 這里就不再廢話!
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!--properties 可以在該標簽內配置連接數據庫的信息,也可以通過屬性引用外部配置文件信息resources屬性 用于指定配置文件的位置,是按照類路徑寫法來寫的,且必須存在于類路徑下。url屬性 是按照url的寫法來寫的 file:///c://xxx/xxx 類似這樣--><properties resource="JDBC.properties"><!-- <property name="driver" value="com.mysql.jdbc.Driver"/>--> <!--這種寫法就是在標簽內直接配置--><!--使用 resource屬性這種的就是引用外部的配置文件 這里是用resource下的JDBC.properties文件--></properties><!--typeAliases 是取別名 typeAlias是為type屬性的取一個alias中的別名--><typeAliases><!-- <typeAlias type="com.test.domain.User" alias="user"></typeAlias>--><!--用于指定要配置別名的包,當指定之后,該包下的實體類都會注冊別名,并且類名就是別名,不再區分大小寫--><package name="com.test.domain"/></typeAliases><!--配置環境--><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"> <!--連接池配置 dataSource中 type屬性是連接池的種類 推薦用POOLED--><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><!-- <mapper resource="com/test/Dao/IUserDao.xml"></mapper> --><!-- 這里的package標簽是用于指定dao接口的所在的包,當指定了之后就不需要再寫mapper及其他的屬性resource 或者 class --><package name="com.test.Dao"/></mappers></configuration>在標簽properties里可以導入外部的配置文件也可以直接用property標簽進行設置屬性,這邊本人建議使用外部導入的配置文件 導入配置文件可以用url 屬性或是resource屬性 我建議用resource屬性,因為把文件放入resources文件夾下的話,使用resource屬性只需要寫文件名就行了。
typeAliases標簽可以設置別名,就是在一些sql標簽中如果沒有設置別名 ,在引入該類的時候就要寫全限定類名,這樣針對開發來說是比較麻煩的。typeAliases標簽下的typeAlias標簽的功能是設置別名的,type是要要設置別名的全限定類名,alias是別名。但是typeAliases標簽有有個package標簽 ,這個標簽用于指定要配置別名的包,當指定之后,該包下的實體類都會注冊別名,并且類名就是別名,不再區分大小寫。強烈推薦使用package。
environments標簽是用來配置sql環境的
<!--mybatis的主配置文件--> <configuration><!--配置環境--><environments default="mysql"><!--配置mysql環境--><environment id="mysql"><!--配置事務類型--><transactionManager type="JDBC"></transactionManager><!--配置數據源(連接池)--><dataSource type="POOLED"> <!--連接池配置 dataSource中 type屬性是連接池的種類 推薦用POOLED--><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments>enviroment標簽中的id屬性的值要與environments標簽中的default屬性一致
mappers標簽是用來指定映射配置文件的位置 , 映射配置文件指的是每個dao獨立的配置文件
mappers標簽下的mapper標簽是用來映射配置文件的 ,resource用來映射dao的配置文件的位置 (這種是采用xml配置),還有一種是使用注解配置,該配置方式要使用class屬性來配置-------對應dao的接口文件的全限定類名
當然這種映射對于開發來講是比較麻煩的,不過我們可以采用mappers標簽下的package標簽 這個標簽可以用于指定dao接口的所在的包,當指定了之后就不需要再寫mapper及其他的屬性resource 或者 class
3. 配置mapper映射文件
Ps:mapper映射文件的名稱最好要和對應的DAO接口的名稱一致。例如IUserDao.java接口,對應的mapper的文件名就是IUserDao.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.test.dao.IUserDao"><!--配置查詢所有--> <!--有了它就有了執行的sql語句,就可以獲取PreparedStatement對象--><select id="findAll" resultType="com.test.domain.User" >select *from user;</select><!--此配置中還有封裝的實體類全限定類名--> </mapper>mapper標簽中的namespace屬性就是對應Dao的全限定類名
select標簽的id屬性就是對應Dao中的方法名稱 resultType就是映射封裝類型
Ps:當取了別名之后resultType這邊就可以用別名來代替
3.入門案例
1.配置JavaBean
JavaBean得繼承配置Serializable序列化接口,為了是接下來的Mybatis的使用
package com.test.domain;import java.io.Serializable; import java.util.Date; import java.util.List;public class User implements Serializable {private Integer id;private String username;private String address;private String sex;private Date birthday;/*多對多的關系映射 :一個用戶可以具有多個角色*//* private List<Role> roles; *//* public List<Role> getRoles() {return roles;}public void setRoles(List<Role> roles) {this.roles = roles;}*/public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", address='" + address + '\'' +", sex='" + sex + '\'' +", birthday=" + birthday +'}';} }2.配置IUserDao.java
package com.test.Dao;import com.test.domain.QueryVo; import com.test.domain.User;import java.util.List;/*** 用戶的持久層接口*/ public interface IUserDao {/*** 查詢所有用戶* @return*/List<User> findAll();/*** 查詢一個用戶*/User findOne(Integer id);/*** 模糊查詢*/List<User> findbyname(String username);/*** 通過QueryVo 模糊查詢*/List<User> findbyVo(QueryVo vo);/*** 查詢用戶總條數*/int findTotal();/*** 保存用戶*/void saveUser(User user);/*** 修改用戶*/void updateUser(User user);/*** 刪除用戶*/void deleteUser(Integer id);}3.配置IUserDao.xml
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.test.Dao.IUserDao"><!--resultType 是查詢結果保存的類型--><select id="findAll" resultType="com.test.domain.User">select *from user;</select><!--parameType 是保存插入修改數據的類型--><insert id="saveUser" parameterType="com.test.domain.User"><!--在保存用戶之后,獲取用戶的id keyProperty是指(屬性名稱)id在實體類中的名稱 order是指該操作是在保存用戶之前執行還是在之后執行 keyColumn(列名)是id在數據庫里的名稱 --><selectKey keyProperty="id" resultType="int" order="AFTER" keyColumn="id">select last_insert_id()</selectKey>insert into user(username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})</insert><update id="updateUser" parameterType="com.test.domain.User">UPDATE user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}</update><delete id="deleteUser" parameterType="java.lang.Integer">delete from user where id=#{uid}</delete><!--查詢單個用戶--><select id="findOne" parameterType="java.lang.Integer" resultType="com.test.domain.User">select *from user where id=#{uid}</select><!--模糊查詢--><select id="findbyname" parameterType="java.lang.String" resultType="com.test.domain.User">select *from user where username like #{uname}<!--select *from user where username like '%${value}%' --> <!--第二種方式 但是¥里面的名稱必須是value 第一種好--></select><!--查詢用戶的總記錄條數--><select id="findTotal" resultType="int" >select count(id) from user</select><select id="findbyVo" parameterType="com.test.domain.QueryVo" resultType="com.test.domain.User">select *from user where username like #{user.username}</select> </mapper>4.創建測試類使用Junit
由于該博客是為本人日后復習準備,所以有些知識就不再多說
畢竟今天是情人節,看不懂你咬我啊(來自單身狗的群嘲)
5.入門案例查詢結果展示
4.作者有話講
今天是情人節,本人閑來無事在朋友圈里‘溜達’,哪曾想狗糧撒我一臉,心中悲憤無處宣泄,想到2020年年初的不堪,不敢多添事端,安心在家即可。又想到天天在csdn里白嫖大佬的成果,呸!成果(諸葛大力)是我的!!!內心忐忑不安,唯有將心比心,將近日所學奉獻給如我這般的小白,順便找點事做躲過這個該死的情人節!別說了,這一切要從…吃了…開始!武漢加油!中國加油!!
總結
以上是生活随笔為你收集整理的Mybatis(1)---入门篇单表查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java方法调用的格式_Java基础(一
- 下一篇: 故障error: failed to r