前面Mybatis是直接經過Dao層與數據交互,更好的方法是Mybatis經過接口映射方式與數據交互java
<!-- 在pom.xml下配置 --> <!-- mybatis核心包 --> <dependencies> <!-- mybatis核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <!-- mysql驅動包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> <!-- junit測試包 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- 日誌文件管理包 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.12</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.12</version> </dependency> </dependencies>
Maven要按照大佬博客說的配置,接下來file-->settings-->Maven-->Maven home directory設置爲
Maven安裝包路徑
而後user settings file 設置爲安裝包路徑
\conf\settings.xmlmysql
package com.qf.mybatisdemo.pojo; import java.util.List; public class UserInfo { int userId; String password; String email; String phone; String icon; String userName; String name; List<RoleInfo> roleInfoList; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<RoleInfo> getRoleInfoList() { return roleInfoList; } public void setRoleInfoList(List<RoleInfo> roleInfoList) { this.roleInfoList = roleInfoList; } @Override public String toString() { return "UserInfo{" + "userId=" + userId + ", password='" + password + '\'' + ", email='" + email + '\'' + ", phone='" + phone + '\'' + ", icon='" + icon + '\'' + ", userName='" + userName + '\'' + ", name='" + name + '\'' + ", roleInfoList=" + roleInfoList + '}'; } }
package com.qf.mybatisdemo.mapper; import com.qf.mybatisdemo.pojo.UserInfo; import com.qf.mybatisdemo.userVo.UserVo; import java.util.List; public interface UserInfoMapper { <!--查詢--> public UserVo userInfoLogin(UserVo userVo); <!--public int addUserInfo(UserVo userVo);--> <!--public int updateUserInfobyId(UserVo userVo);--> <!--public int deleteUserInfo(UserVo userVo);--> <!--public List<UserInfo> getUserInfo(UserInfo userInfo);--> }
<?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.qf.mybatisdemo.mapper.UserInfoMapper"><!--注意此處--> <select id="UserInfoLogin" parameterType="userVo" resultType="userVo"> select * from userinfo <where> <if test="userName != null and userName == ''"> and username=#{userName} </if> <if test="password != null and password == ''"> and password =#{password} </if> </where> </select> </mapper>
namespace
通常綁定對應的文件的全路徑,web
第一種:namespace綁定實體類的全路徑:當namespace綁定的是實體類的全路徑時,其實現數據持久化的方式爲無代理模式實現數據持久化。須要手動實現dao層的接口。sql
<mapper namespace="com.qf.pojo.User"></namespace>
第二種:namespace綁定dao層接口的全路徑:當namespace綁定的是dao接口的全路徑時,其實現數據持久化的方式爲有代理模式實現數據持久化。即會自動產生代理,自動實現數據的持久化,不須要實現dao層的接口。數據庫
<mapper namespace="com.qf.dao.userDao"></namespace>
第三種:namespace綁定的是mapper接口對應的sql.xml文件是,其也是有代理模式自動實現數據持久化。但mapper接口對應的sql.xml文件名必須保持一致才能自動實現數據持久化。apache
<mapper namespace="com.qf.mapper.UserInfoMapper"></namespace>
log4j.rootLogger=DEBUG,CONSOLE,file #log4j.rootLogger=ERROR,ROLLING_FILE #下面log4j.logger.com.qf.dao=debug 根據項目目錄來改 log4j.logger.com.qf.dao=debug log4j.logger.com.ibatis=debug log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug #log4j.logger.java.sql.Connection=debug #log4j.logger.java.sql.Statement=debug #log4j.logger.java.sql.PreparedStatement=debug #log4j.logger.java.sql.ResultSet=debug log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug ###################################################################################### # Console Appender \u65e5\u5fd7\u5728\u63a7\u5236\u8f93\u51fa\u914d\u7f6e ###################################################################################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=error log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n ###################################################################################### # DailyRolling File \u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\uff0c\u6587\u4ef6\u540d\u683c\u5f0f:log2009-09-11 ###################################################################################### log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.DatePattern=yyyy-MM-dd log4j.appender.file.File=log.log log4j.appender.file.Append=true log4j.appender.file.Threshold=error log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L)%m%n log4j.logger.com.opensymphony.xwork2=error
<?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"> <configuration> <properties resource="mysql.properties"/> <settings> <!--全局性設置懶加載。若是設爲‘false’,則全部相關聯的都會被初始化加載,默認值爲false--> <setting name="lazyLoadingEnabled" value="true"/> <!--當設置爲‘true’的時候,懶加載的對象可能被任何懶屬性所有加載。不然,每一個屬性都按需加載。默認值爲true--> <setting name="aggressiveLazyLoading" value="false"/> </settings> <typeAliases> <!-- 將com.qf.mybatisdemo.pojo.User的替換成一個短的名字user--> <typeAlias type="com.qf.mybatisdemo.pojo.User" alias="user"/> </typeAliases> <!--對事務的管理和鏈接池的配置--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"><!--POOLED:使用Mybatis自帶的數據庫鏈接池來管理數據庫鏈接--> <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> <!--resource下mapper的xml文件路徑配置--> <mappers> <mapper resource="mapper/UserMapper.xml"/> <mapper resource="mapper/UserInfoMapper.xml"/> <!--<mapper resource="mapper/RoleInfoMapper.xml"/>--> <!--<mapper resource="mapper/MenuInfoMapper.xml"/>--> </mappers> </configuration>
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/1901mybatis?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8 jdbc.username=root jdbc.password=root
package com.qf.mybatisdemo; import com.qf.mybatisdemo.dao.BaseDao; import com.qf.mybatisdemo.mapper.UserInfoMapper; import com.qf.mybatisdemo.pojo.UserInfo; import com.qf.mybatisdemo.userVo.UserVo; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class MybatisDemo2 { BaseDao baseDao = new BaseDao();<!--調用前面的BaseDao曾--> SqlSession sqlSession = baseDao.getSqlSession(); UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper.class); @Test public void UserInfoLogin() { UserVo userVo =new UserVo(); UserVo userVo2 =new UserVo(); userVo.setPassword("123456"); userVo.setUserName("liaomou"); userVo2 = userInfoMapper.userInfoLogin(userVo); System.out.println(userVo2); } }