之前使用SpringMVC框架做了一個項目,後來項目中需要將數據持久化,就選擇了使用mybits 3.4.1+mysql 5.7這樣的架構,mybits比較靈活,入門比較簡單,雖然寫的SQL語句比較多,但做一些小項目還是可以的,本人使用的是maven配置mybits。
先上傳一張項目文件結構
第一步,在原有的項目中添加mybits和mysql驅動的依賴。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
添加好後可以選中項目右鍵maven->upadte project第二步,在src/main/resources文件夾下創建數據庫配置文件jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/speech
username=root
password=yue960713
#\u5B9A\u4E49\u521D\u59CB\u8FDE\u63A5\u6570
initialSize=0
#\u5B9A\u4E49\u6700\u5927\u8FDE\u63A5\u6570
maxActive=20
#\u5B9A\u4E49\u6700\u5927\u7A7A\u95F2
maxIdle=20
#\u5B9A\u4E49\u6700\u5C0F\u7A7A\u95F2
minIdle=1
#\u5B9A\u4E49\u6700\u957F\u7B49\u5F85\u65F6\u95F4
maxWait=60000
第三步,在src/main/resources文件夾下創建mybits配置文件mybits-config.xml
<?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格式對應文件,從而使得主配置文件更加通用。這樣對部署非常有用 -->
<!-- <properties resource="mysql.properties" /> -->
<!-- 設置別名,一定要放在properties下面 -->
<properties resource="jdbc.properties"></properties>
<typeAliases>
<typeAlias alias="User" type="com.yueyibo.entity.User" />
</typeAliases>
<!-- 配置數據源相關的信息 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
<!--<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/yueyibo/entity/User.xml" />
</mappers>
</configuration>
第四步,創建映射實體User.java
package com.yueyibo.entity;
public class User {
private int id;
private String account;
private String username;
private String password;
private String token;
private String appkey;
private String appsecret;
private String balance;
public User(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getAppkey() {
return appkey;
}
public void setAppkey(String appkey) {
this.appkey = appkey;
}
public String getAppsecret() {
return appsecret;
}
public void setAppsecret(String appsecret) {
this.appsecret = appsecret;
}
public String getBalance() {
return balance;
}
public void setBalance(String balance) {
this.balance = balance;
}
}
第五步,創建實體類對應的映射文件User.xml
<?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.yueyibo.entity.UserMapper">
<!-- 查找 -->
<select id="findUser" parameterType="com.yueyibo.entity.LoginEntity" resultType="User">
select * from User where account =#{account} and password=#{password}
</select>
<select id="findUserByUsername" parameterType="java.lang.String" resultType="User">
select * from User where username =#{username}
</select>
<!-- 插入 -->
<!-- useGeneratedKeys設置爲"true"表明要MyBatis獲取由數據庫自動生成的主鍵;keyProperty="id"指定把獲取到的主鍵值注入到Employeer的id屬性 -->
<insert id="addUser" parameterType="User"
useGeneratedKeys="true" keyProperty="id">
insert into User(id,account,username,password,token,appkey,appsecret,balance)
values(#{id},#{account},#{username},#{password},#{token},#{appkey},#{appsecret},#{balance})
</insert>
<!-- 刪除 -->
<delete id="deleteUserById" parameterType="int">
delete from User where id = #{id}
</delete>
<!-- 修改 -->
<update id="updateUserById" parameterType="User">
update User set account = #{account},username= #{username},password = #{password}
,token=#{token},appkey=#{appkey},appsecret=#{appsecret},balance=#{balance} where id = #{id}
</update>
</mapper>
第六步,創建Dao類UserDao.java
package com.yueyibo.Dao;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.yueyibo.entity.LoginEntity;
import com.yueyibo.entity.User;
public class UserDao {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 查找
*/
public static User findUserByLoginEntity(LoginEntity loginEntity) {
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
User user = (User) session.selectOne(
"com.yueyibo.entity.UserMapper.findUser", loginEntity);
if (user == null) {
System.out.println("null");
return null;
}
else {
System.out.println(user.getAccount()+user.getPassword());
return user;
}
} finally {
session.close();
}
}
/**
* 增加
*/
public static boolean addUser(User user){
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
//返回值是記錄條數
int resultCount = session.insert("com.yueyibo.entity.UserMapper.addUser", user );
System.out.printf("當前插入的employeer_id :%d 當前插入數據庫中條數:%d " , user.getId() ,resultCount); //獲取插入對象的id
System.out.println("");
session.commit() ;
if(resultCount>=1){
return true;
}
else{
return false;
}
} finally {
session.close();
}
}
/**
* 刪除
*
*/
public static void deleteUesrById(int id){
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
//返回值是記錄條數
int resultCount=session.delete("com.yueyibo.entity.UserMappper.deleteUserById",id);
System.out.println("當前刪除數據庫中條數: "+resultCount); //獲取插入對象的id
session.commit() ;
} finally {
session.close();
}
}
/**
* 更改
*/
public static void updateUser(User user){
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
session.update("com.yueyibo.entity.UserMapper.updateUser",user);
session.commit() ;
} finally {
session.close();
}
}
public static User findUserByUsername(String username) {
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
User user = (User) session.selectOne(
"com.yueyibo.entity.UserMapper.findUserByUsername", username);
if (user == null) {
System.out.println("null");
return null;
}
else {
System.out.println(user.getAccount()+user.getPassword());
return user;
}
} finally {
session.close();
}
}
}
以上就配置好了mybits,接下來寫一個jsp頁面驗證一下,事先我已經在數據庫中插入了一條記錄用作驗證
login.jsp代碼如下登錄成功則顯示用戶名和權限否則顯示登陸失敗
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="checkLogin" method="post">
賬號:<input type="text" name="account"/>
密碼:<input type="password" name="password"/>
<input type="submit" value="提交"/>
</form>
<% String LoginStatus=(String)session.getAttribute("LoginStatus");
if("1".equals(LoginStatus)){
String username=(String)session.getAttribute("username");
String token=(String)session.getAttribute("token");
out.print("<h1>"+username+"</h1>");
out.print("<h1>"+token+"</h1>");
}
else if("0".equals(LoginStatus)){
out.print("<h1>登陸失敗<h1>");
}
%>
</body>
</html>
controller代碼如下
@Controller
public class AudioController {
@RequestMapping(value = "/login")
public String login(){
return "login";
}
//登錄
@RequestMapping(value = "/checkLogin", method=RequestMethod.POST)
public String checkLogin(@RequestParam(value="account") String account,
@RequestParam(value="password") String password,
HttpServletRequest req,HttpServletResponse res){
HttpSession session=req.getSession();
LoginEntity loginEntity=new LoginEntity(account,password);
User user=UserDao.findUserByLoginEntity(loginEntity);
if(user==null){
session.setAttribute("LoginStatus","0");
}
else{
session.setAttribute("LoginStatus","1");
session.setAttribute("username", user.getUsername());
session.setAttribute("token", user.getToken());
}
return "forward:login";
}
}
運行項目,在瀏覽器輸入如下url將會出現以下畫面
測試一下錯誤的登錄賬號
正確輸入登錄賬號後