1. 程式人生 > >Springmvc+Spring+Mybatis+Maven簡單的增刪改查

Springmvc+Spring+Mybatis+Maven簡單的增刪改查

這是適合新手搭建的最簡單的SSM整合框架

這是我的下載資源網址:http://download.csdn.net/my/uploads

首先整合框架的話,至少需要了解一下這幾個框架

Spring介紹

      它是為了解決企業應用開發的複雜性而建立的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益。 簡單來說, Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。

SpringMVC介紹

Spring MVC 屬於 SpringFrameWork 的後續產品,已經融合在Spring Web Flow 裡面。 Spring MVC  分離了 
控制器 、模型物件 、分派器以及處理程式物件的角色,這種分離讓它們更容易進行定製。

MyBatis介紹

MyBatis  本是 apache 的一個開源專案 iBatis , 2010 年這個專案由apache software foundation  遷移到了 google code ,並且改名為 MyBatis  。MyBatis 是一個基於 Java 的 持久層 框架。 iBATIS 提供的 持久層 框架包括SQL Maps 和 Data Access Objects ( DAO ) MyBatis  消除了幾乎所有的 JDBC 程式碼和引數的手工設定以及結果集的檢索。 MyBatis  使用簡單的  XML 或註解用於配置和原始對映,將介面和  Java  的 POJOs ( Plain Old Java Objects ,普通的  Java 物件)對映成資料庫中的記錄。

首先不是maven架構整合的  SSM 框架

建立資料庫、表db_zsl   t_user   user_t【最下面有sql語句】

1.專案整體結構


2.新增相關jar 包


3.專案整體結構出來了

4.建立model【User】

package com.lyt.model;

/** 
 * 使用者 
 * @author 李銀濤
 * 
 */  
public class User {  
  
    private int id;  
    private String userName; 
    private String age;  
    
    @Override
	public String toString() {
		return "User [id=" + id + ", age=" + age + ", userName=" + userName
				+ "]";
	}
	public User(){  
        super();  
    }  
    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    }  
    public String getAge() {  
        return age;  
    }  
    public void setAge(String age) {  
        this.age = age;  
    }  
    public String getUserName() {  
        return userName;  
    }  
    public void setUserName(String userName) {  
        this.userName = userName;  
    }  
    public User(int id, String age, String userName) {  
        super();  
        this.id = id;  
        this.age = age;  
        this.userName = userName;  
    }  
}  
5.建立DAO介面【在mybatis中 mapper就相當於dao】
package com.lyt.mapper;

import java.util.List;

import com.lyt.model.User;
/**
 * 做為 DAO的介面
 * @author 李銀濤
 */
public interface UserMapper {  
    void save(User user);  
    boolean update(User user);  
    boolean delete(int id);  
    User findById(int id);  
    List<User> findAll();  
}  

6.實現dao介面【mybatis中就是UserMapper.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">  
<!--   
    namespace:必須與對應的介面全類名一致  UserMapper.java
    id :必須與對應介面的某個對應的方法名一致即必須要和UserMapper.java介面中的方法同名。
 -->  
 <mapper namespace="com.lyt.mapper.UserMapper">
 
 	<insert id="save" parameterType="User">
 		insert into t_user(user_name,user_age) values(#{userName},#{age})
 	</insert>
 	
 	<update id="update" parameterType="User">  
        update t_user set user_name=#{userName},user_age=#{age} where user_id=#{id}  
    </update> 
    
    <delete id="delete" parameterType="int">  
        delete from t_user where user_id=#{id}  
    </delete>  
      
     <!-- mybsits_config中配置的alias類別名,也可直接配置resultType為類路徑 -->    
    <select id="findById" parameterType="int" resultType="User">  
        select user_id id,user_name userName,user_age age from t_user where user_id=#{id}  
    </select>  
      
    <select id="findAll" resultType="User">  
        select user_id id,user_name userName,user_age age from t_user  
    </select> 
    
 </mapper>

這裡對這個xml檔案作幾點說明: 
1、namespace必須與對應的介面全類名一致。 
2、id必須與對應介面的某個對應的方法名一致即必須要和UserMapper.java介面中的方法同名。 

---------------------------------------------------

7.mybatis與Spring整合【spring-common.xml】放在src的根目錄下

 對於Mybatis和Spring的整合是這篇博文的重點,需要配置的內容在下面有詳細的解釋。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

<!-- Mybatis和Spring的整合 -->
	<!-- 1. 資料來源 : DriverManagerDataSource -->
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/db_zsl" />
		<property name="username" value="root" />
		<property name="password" value="root" />
	</bean>

	<!--
		2. mybatis的SqlSession的工廠: SqlSessionFactoryBean dataSource:引用資料來源

		MyBatis定義資料來源,同意載入配置
	-->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="configLocation" value="classpath:mybatis-config.xml" /> 
	</bean>

	<!--
		3. mybatis自動掃描載入Sql對映檔案/介面 : MapperScannerConfigurer sqlSessionFactory

		basePackage:指定sql對映檔案/介面所在的包(自動掃描)
	-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.lyt.mapper"></property>
		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
	</bean>

	<!--
		4. 事務管理 : DataSourceTransactionManager dataSource:引用上面定義的資料來源
	-->
	<bean id="txManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

	<!-- 5. 使用宣告式事務
		 transaction-manager:引用上面定義的事務管理器
	 -->
	<tx:annotation-driven transaction-manager="txManager" />

</beans>

8.mybatis配置檔案【mybatis-config.xml】放在src目錄下
<?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>

	<!-- 實體類,簡稱 -設定別名 -->
	<typeAliases>
		<typeAlias alias="User" type="com.lyt.model.User" />
	</typeAliases>
	<!-- 實體介面對映資源 -->
	<!--
		說明:如果xxMapper.xml配置檔案放在和xxMapper.java統一目錄下,mappers也可以省略,因為org.mybatis.spring.mapper.MapperFactoryBean預設會去查詢與xxMapper.java相同目錄和名稱的xxMapper.xml
	-->
	<mappers>
		<mapper resource="com/lyt/mapper/userMapper.xml" />
	</mappers>

</configuration>  

配置log4j.properties

### set log levels ### 
log4j.rootLogger = info , Console , D
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=INFO
log4j.logger.java.sql.Statement=INFO
log4j.logger.java.sql.PreparedStatement=INFO
#output2file
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.D.File = D\:/logs/log.log 
log4j.appender.D.Append = true 
log4j.appender.D.Threshold = INFO \#\# \u00E8\u00BE\u0093\u00E5\u0087\u00BAinfo\u00E7\u00BA\u00A7\u00E5\u0088\u00AB\u00E4\u00BB\u00A5\u00E4\u00B8\u008A\u00E7\u009A\u0084\u00E6\u0097\u00A5\u00E5\u00BF\u0097 
log4j.appender.D.layout = org.apache.log4j.PatternLayout 
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n 
 

10.整合Springmvc

配置【spring-mvc.xml】放在src根目錄下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/mvc
	http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

	<!-- 註解掃描包 -->
	<context:component-scan base-package="com.lyt.controller" />
	<context:component-scan base-package="com.lyt.service" />

	<!-- 開啟註解 -->
	<mvc:annotation-driven />

	<!--
		配置靜態資源,直接對映到對應的資料夾,不被DispatcherServlet處理,3.04新增功能,需要重新設定spring-mvc-3.0.xsd
	-->
	<mvc:resources mapping="/img/**" location="/img/" />
	<mvc:resources mapping="/js/**" location="/js/" />
	<mvc:resources mapping="/css/**" location="/css/" />
	<mvc:resources mapping="/html/**" location="/html/" />



	<!-- 定義跳轉的檔案的前後綴 ,檢視模式配置-->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 這裡的配置我的理解是自動給後面action的方法return的字串加上字首和字尾,變成一個 可用的url地址 -->
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>
</beans>

11.配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- 載入Spring容器配置 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- 設定Spring容器載入所有的配置檔案的路徑 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<!-- <param-value>classpath:config/spring-*.xml</param-value> -->
		<param-value>classpath:spring-common.xml,classpath:spring-mvc.xml</param-value>
		
	</context-param>

	<!-- 配置SpringMVC核心控制器 -->
	<servlet>
		<servlet-name>springMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 配置初始配置化檔案,前面contextConfigLocation看情況二選一 -->  
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-common.xml,classpath:spring-mvc.xml</param-value>
		</init-param>
		<!-- 啟動載入一次 -->  
		<load-on-startup>1</load-on-startup>
	</servlet>

	<!--為DispatcherServlet建立對映 -->
	<servlet-mapping>
		<servlet-name>springMVC</servlet-name>
		<!-- 此處可以可以配置成*.do,對應struts的字尾習慣 -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<!-- 防止Spring記憶體溢位監聽器 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>

	<!-- 解決工程編碼過濾器 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

12.建立service以及service實現【UserService.java】
package com.lyt.service;

import java.util.List;

import com.lyt.model.User;

public interface UserService {
	void save(User user);
	boolean update(User user);
	boolean delete(int id);
	User findById(int id);
	List<User> findAll();
}


【UserServiceImpl.java】

package com.lyt.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.lyt.mapper.UserMapper;
import com.lyt.model.User;
import com.lyt.service.UserService;

@Service
@Transactional
// 此處不再進行建立SqlSession和提交事務,都已交由spring去管理了。
public class UserServiceImpl implements UserService {

	@Resource
	private UserMapper mapper;

	/**
	 * 根據  id  刪除 資料
	 */
	public boolean delete(int id) {
		return mapper.delete(id);
	}
	/**
	 * 查詢User的全部資料
	 */
	public List<User> findAll() {
		List<User> findAllList = mapper.findAll();
		return findAllList;
	}
	/**
	 * 根據 id 查詢 對應資料
 	 */
	public User findById(int id) {
		User user = mapper.findById(id);
		return user;
	}
	/**
	 * 新增資料
	 */
	public void save(User user) {
		mapper.save(user);
	}
	/**
	 * 根據 id 修改對應資料
	 */
	public boolean update(User user) {
		return mapper.update(user);
	}

}


13.建立Controller【UserController.java】

<span style="font-size:14px;">package com.lyt.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.lyt.model.User;
import com.lyt.service.UserService;

@Controller
@RequestMapping("/user")
public class UserController {
	@Autowired
	private UserService userService;
	/**
	 * 獲取所有使用者列表
	 * @param request
	 * @return
	 */
	@RequestMapping("/getAllUser")
	public String getAllUser(HttpServletRequest request,Model model){
		List<User> user = userService.findAll();
		model.addAttribute("userList", user);
		request.setAttribute("userList", user);
		return "/allUser";
	}
	/**
	 * 跳轉到新增使用者介面
	 * @param request
	 * @return
	 */
	@RequestMapping("/toAddUser")
	public String toAddUser(){
		return "/addUser";
	}
	/**
	 * 新增使用者並重定向
	 * @param user
	 * @param request
	 * @return
	 */
	@RequestMapping("/addUser")
	public String addUser(User user,Model model){
		userService.save(user);
		return "redirect:/user/getAllUser";
	}
	/**
	 *編輯使用者
	 * @param user
	 * @param request
	 * @return
	 */
	@RequestMapping("/updateUser")
	public String updateUser(User user,HttpServletRequest request,Model model){
		if(userService.update(user)){
			user = userService.findById(user.getId());
			request.setAttribute("user", user);
			model.addAttribute("user", user);
			return "redirect:/user/getAllUser";
		}else{
			return "/error";
		}
	}
	/**
	 * 根據id查詢單個使用者
	 * @param id
	 * @param request
	 * @return
	 */
	@RequestMapping("/getUser")
	public String getUser(int id,HttpServletRequest request,Model model){
		request.setAttribute("user", userService.findById(id));
		model.addAttribute("user", userService.findById(id));
		return "/editUser";
	}
	/**
	 * 刪除使用者
	 * @param id
	 * @param request
	 * @param response
	 */
	@RequestMapping("/delUser")
	public void delUser(int id,HttpServletRequest request,HttpServletResponse response){
		String result = "{\"result\":\"error\"}";
		if(userService.delete(id)){
			result = "{\"result\":\"success\"}";
		}
		response.setContentType("application/json");
		try {
			PrintWriter out = response.getWriter();
			out.write(result);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
</span>

至此 大部分架構以及程式碼已經搭建完成

我們來做前臺頁面--修改index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>首頁</title>
</head>
<body>
	<h5>
		<a href="<%=basePath%>user/getAllUser">進入使用者管理頁</a>
	</h5>
</body>
</html>

在 WEB-INF 下新建jsp資料夾【裡面新建以下檔案】addUser.jsp】【allUser.jsp】【editUser.jsp

addUser.jsp內容

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>新增使用者</title>
    
	<script type="text/javascript">
	function addUser(){
		var form = document.forms[0];
		form.action = "<%=basePath%>user/addUser";
		form.method="post";
		form.submit();
	}
</script>

  </head>
  
  <body>
    <h1><%=path%>新增使用者<%=basePath%></h1>
	<form action="" name="userForm">
		姓名:<input type="text" name="userName">
		年齡:<input type="text" name="age">
		<input type="button" value="新增" onclick="addUser()">
	</form>
  </body>
</html>

allUser.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <script type="text/javascript" src="js/jquery-1.7.1.js"></script>
    <title>使用者列表</title>
    
	<script type="text/javascript">
	function del(id){
		$.get("<%=basePath%>user/delUser?id=" + id,function(data){
			if("success" == data.result){
				alert("刪除成功");
				window.location.reload();
			}else{
				alert("刪除失敗");
			}
		});
	}
</script>
  </head>
  
  <body>
    <h6><a href="<%=basePath%>user/toAddUser">新增使用者</a></h6>
	<table border="1">
		<tbody>
			<tr>
				<th>姓名</th>
				<th>年齡</th>
				<th>操作</th>
			</tr>
			<c:if test="${!empty userList }">
				<c:forEach items="${userList}" var="user">
					<tr>
						<td>${user.userName }</td>
						<td>${user.age }</td>
						<td>
							<a href="<%=basePath%>user/getUser?id=${user.id}">編輯</a>
							<a href="javascript:del('${user.id }')">刪除</a>
						</td>
					</tr>				
				</c:forEach>
			</c:if>
		</tbody>
	</table>
  </body>
</html>

editUser.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>編輯使用者</title>
    
	<script type="text/javascript">
	function updateUser(){
		var form = document.forms[0];
		form.action = "<%=basePath%>user/updateUser";
		form.method="post";
		form.submit();
	}
</script>

  </head>
  
  <body>
    <h1>新增使用者</h1>
	<form action="" name="userForm">
		<input type="hidden" name="id" value="${user.id }"/>
		姓名:<input type="text" name="userName" value="${user.userName }"/>
		年齡:<input type="text" name="age" value="${user.age }"/>
		<input type="button" value="編輯" onclick="updateUser()"/>
	</form>
  </body>
  
</html>

到此 簡單的整合SSM 【基本的操作內容已經完成】

讓你們看下介面執行,地址:http://localhost:8088/SpringMVC_Spring_mybatis/

首頁:


點選編輯進去:


點選新增進去:


由於我在網路問題  圖片暫時沒有上傳上去。【現在我吧圖片都正上去了,希望多多支援】 對應的資料庫 表
/*
Navicat MySQL Data Transfer

Source Server         : localhost
Source Server Version : 50515
Source Host           : localhost:3306
Source Database       : db_zsl

Target Server Type    : MYSQL
Target Server Version : 50515
File Encoding         : 65001

Date: 2016-05-16 16:10:51
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `t_user`
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(20) NOT NULL,
  `user_age` varchar(20) NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES ('2', '朱佳鵬', '25');
INSERT INTO `t_user` VALUES ('3', '傻狍子', '150');
INSERT INTO `t_user` VALUES ('4', 'jiuqiyuliang', '23');
INSERT INTO `t_user` VALUES ('5', 'jiuqiyuliang', '23');
INSERT INTO `t_user` VALUES ('6', 'jiuqiyuliang', '23');
INSERT INTO `t_user` VALUES ('7', 'jiuqiyuliang', '23');
INSERT INTO `t_user` VALUES ('9', 'liyintao123', '23123');

-- ----------------------------
-- Table structure for `user_t`
-- ----------------------------
DROP TABLE IF EXISTS `user_t`;
CREATE TABLE `user_t` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(40) NOT NULL,
  `password` varchar(255) NOT NULL,
  `age` int(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user_t
-- ----------------------------
INSERT INTO `user_t` VALUES ('1', '測試', 'sfasgfaf', '24');