0.准备工具
因为配置文件都是读取相同的,所以可以进行工厂类封装。
我大概率会编程。
数据库配置:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25CREATE TABLE tb_clazz
(
id INT AUTO_INCREMENT
PRIMARY KEY,
CODE VARCHAR(18) NULL,
name VARCHAR(18) NULL,
CONSTRAINT TB_CLAZZ_id_uindex
UNIQUE (id)
)
CREATE TABLE tb_student
(
id INT AUTO_INCREMENT
PRIMARY KEY,
NAME VARCHAR(18) NULL,
sex CHAR(3) NULL,
age INT NULL,
clazz_id INT NULL,
CONSTRAINT TB_STUDENT_id_uindex
UNIQUE (id),
CONSTRAINT TB_STUDENT_tb_clazz_id_fk
FOREIGN KEY (clazz_id) REFERENCES tb_clazz (id)
)
CREATE INDEX TB_STUDENT_tb_clazz_id_fk
ON tb_student (clazz_id);
数据库配置:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25CREATE TABLE tb_card
(
id INT AUTO_INCREMENT
PRIMARY KEY,
code VARCHAR(18) NULL,
CONSTRAINT tb_card_id_uindex
UNIQUE (id)
)
CREATE TABLE tb_person
(
id INT AUTO_INCREMENT
PRIMARY KEY,
name VARCHAR(18) NULL,
sex VARCHAR(18) NULL,
age INT NULL,
card_id INT NULL,
CONSTRAINT tb_person_id_uindex
UNIQUE (id),
CONSTRAINT tb_person_card_id_uindex
UNIQUE (card_id),
CONSTRAINT tb_person_tb_card_id_fk
FOREIGN KEY (card_id) REFERENCES tb_card (id)
)
ENGINE = Inno
身份证和人是一对一的关系,在tb_person表中,card_id为外键,对应tb_card主键,且card_id唯一,就满足了一对一的关系。
两个pojo类:
1
2
3
4
5public class Card implements Serializable{
private Integer id;
private String code;
//getter,setter
1 | public class Person implements Serializable{ |
mapper配置:1
2
3
4
5
6
7
8//CardMapper.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="org.fkit.mapper.CardMapper">
<select id="selectCardById" parameterType="int" resultType="org.fkit.domain.Card">
SELECT * FROM tb_card WHERE id = #{id}
</select>
</mapper>
1 | //PersonMapper.xml |
在此可以给PersonMapper设置一个接口:1
2
3
4
5
6
7
8
9
10
11
12//PersonMapper.java
package org.fkit.mapper;
import org.fkit.domain.Person;
public interface PersonMapper {
/**
* @param id
* @return Person
*/
Person selectPersonById(Integer id);
}
在mybatis-config.xml中配置这2个mapper:1
2<mapper resource="org/fkit/mapper/PersonMapper.xml"/>
<mapper resource="org/fkit/mapper/CardMapper.xml"/>
测试代码:1
2
3
4
5
6
7
8
9
10//OneToOneTset.java
public class OneToOneTest {
public static void main(String args[])throws Exception {
SqlSession sqlSession = FKSqlSessionFactory.getSqlSession();
Person person = sqlSession.selectOne("org.fkit.mapper.PersonMapper.selectPersonById", 1);
System.out.println(person);
}
}
//output:
Person{id=1, name='jack', sex='男', age=23, card=Card{id=1, code='432801198009191038'}}
因为设置了接口,也可以如此测试:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15//OneToOneTset.java
public class OneToOneTest {
public static void main(String args[])throws Exception {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
PersonMapper personMapper = session.getMapper(PersonMapper.class);
Person person = personMapper.selectPersonById(1);
System.out.println(person);
}
}
//output:
Person{id=1, name='jack', sex='男', age=23, card=Card{id=1, code='432801198009191038'}}
java:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67package org.fkit.controller;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.domain2.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("/user")
public class UserController {
private static List<User> userList;
public UserController() {
super();
userList = new ArrayList<User>();
}
private static Log logger = LogFactory.getLog(UserController.class);
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String requireForm() {
logger.info("register GET被调用");
System.out.println("register GET被调用");
return "registerForm";
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(
@RequestParam("loginname") String loginname,
@RequestParam("password") String password,
@RequestParam("username") String username) {
logger.info("register POST被调用");
System.out.println("register POST被调用");
User user = new User();
user.setLoginname(loginname);
user.setUsername(username);
user.setPassword(password);
userList.add(user);
System.out.println(userList);
return "loginForm";
}
@RequestMapping("/login")
public String login(
@RequestParam("loginname") String loginname,
@RequestParam("password") String password,
Model model){
logger.info("登录名" + loginname + " 密码" + password);
for (User user : userList) {
if (user.getLoginname().equals(loginname) &&
user.getPassword().equals(password)) {
model.addAttribute("user", user);
return "welcome";
}
}
return "loginForm";
}
}
springmvc-config2.xml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21<?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"
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.xsd">
<!--<bean name="/hello" class="org.fkit.controller.HelloController"/>-->
<context:component-scan base-package="org.fkit.controller"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/content/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
web.xml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>springmvc2</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/springmvc-config2.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc2</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
</web-app>
1 | package org.fkit.controller; |
jsp:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<%--
Created by IntelliJ IDEA.
User: 34924
Date: 2018/8/1
Time: 22:40
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>test</title>
</head>
<body>
<a href="/pathVariableTest/1">测试注解1</a>
<br>
<a href="/requestHeaderTest">注解2</a>
<br>
<a href="/cookieValueTest">注解3</a>
</body>
</html>