jy-10-SPRINGMYBATIS01——MyBatis-程祖红/刘苍松
目录:
1、day01-MyBatis-程祖红
2、day07-MyBatis-刘苍松
文件已上传分享
3、day08-SSM-刘苍松
文件已上传分享
@程祖红
1、day01-MyBatis
(1)MyBatis是什么?
(2)编程步骤
step5. 调用MyBatis的api访问数据库。
(3)原理 (了解)
(4)返回Map类型的结果
(5)解决实体类的属性名与表的字段名不一致的情况
day02
1.Mapper映射器
(1)什么是Mapper映射器?
(2)如何写Mapper映射器?
(3)如何使用Mapper映射器?
2.Spring集成MyBatis (使用Mapper映射器)
1)编程步骤
2)只扫描带有特定注解的Mapper映射器
3.Spring集成MyBatis(不使用Mapper映射器 old)
(1)编程步骤
namespace="cn.tedu.login.dao.UserDAO"
<select id="findByUsername"
parameterType="string"
resultType="cn.tedu.login.entity.User">
SELECT id ...
</select>
step5.Mapper映射器
@刘苍松版
2、day07-MyBatis
MyBatis 结构
MyBatis的使用步骤:
<dependencies><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>3.2.8.RELEASE</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.3</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.8</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.37</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>3.2.8.RELEASE</version></dependency></dependencies>
2.编写数据库配置文件用于链接数据库-db.properties
文件已上传分享
url=jdbc:mysql://localhost:3306/springmvc
driver=com.mysql.jdbc.Driver
username=root
password=
initsize=1
maxsize=5
<?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"> <!-- XML 配置文件(config.xml)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的 数据源(DataSource)和决定事务范围和控制方式的事 务管理器(TransactionManager)。XML 配置文件的 详细内容后面再探讨,这里先给出一个简单的示例: -->
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springmvc"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 映射文件的地址 -->
<mapper resource="mapping/userMapper.xml"/>
</mappers>
</configuration>
<?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">
<!-- 在命名空间“cn.tedu.mybatis.dao.IUserDao”中定义了一个名为
“selectUser”的映射语句,这样它就允许你使用指定的完全限定名
“cn.tedu.mybatis.dao.IUserDao.selectUser”来调用映射语句,
-->
<mapper namespace="cn.tedu.mybatis.dao.IUserDao">
<!-- 这条sql语句用语查询表中左右数据 resulType:结果类型--><select id="selectUser" resultType="cn.tedu.mybatis.bean.User">
select id,username,password,salary from user
</select>
</mapper>
package cn.tedu.mybatis.bean;
public class User {private Integer id;private String username;private String password;private Integer salary;//篇幅太长,此处省略}
package cn.tedu.mybatis.dao;import java.util.List;import cn.tedu.mybatis.bean.User;public interface IUserDao {/*** 查询所有用户* @return*/public List<User> selectUser();
}
package cn.tedu.mybatis.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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 org.junit.Before;
import org.junit.Test;
import cn.tedu.mybatis.bean.User;
import cn.tedu.mybatis.dao.IUserDao;
public class MybatisTestCase {SqlSessionFactory factory;/*** 初始化方法* @throws IOException*/@Beforepublic void init() throws IOException {String config ="config.xml";InputStream in= Resources.getResourceAsStream(config);factory = new SqlSessionFactoryBuilder().build(in);}/*** 查询所有数据*/@Testpublic void testSelect() {SqlSession session = factory.openSession();IUserDao dao = session.getMapper(IUserDao.class);List<User> list =dao.selectUser();for(User user :list) {System.out.println(user);}session.close();}
}
- 在IUserDao中声明接口方法
/** * 查询全部的用户信息 */ public List findAllUsers();
- 在 userMapper.xml 中声明SQL语句<!-- MyBatis 会自动的将查询结果中列名与User的Bean属性对应赋值,如果表的列名与User Bean属性 列名不一致,则需要使用列的别名方式修改查询结果列名,使其与User Bean属性一致。-->
<select id="findAllUsers" resultType="cn.tedu.mybatis.bean.User">select id, username, password, salary from user </select>
resultType 用于声明返回值类型,其类型与返回的List中元素类型一致。 - 测试:
/*** 查询全部用户信息*/@Testpublic void testFindAllUsers() {SqlSession session = factory.openSession();IUserDao dao =session.getMapper(IUserDao.class);List<User> list = dao.findAllUsers();for (User user : list) {System.out.println(user);}session.close();}
SqlSession 接口也可以直接执行SQL
/*** 利用SqlSession直接执行SQL,不访问DAO接口* 与访问dao接口的结果完全一样。* SqlSession提供了两种执行SQL功能*/@Testpublic void testInsert() {SqlSession session = factory.openSession();//session.insert("SQL ID", 参数对象)User user = new User();user.setUsername("Andy");user.setPassword("123");user.setSalary(200);System.out.println(user);//id=nullInteger n = session.insert("insertUser", user);System.out.println(user);//id=?System.out.println(n);session.commit();session.close();}
MyBatis实现更新和删除功能
- 添加 接口方法
/** * iUserDao 中添加更新方法,将用户信息进行更新 * @param user 需要更新的用户信息 * @return 更新的行数 */ public Integer updateUser(User user);public User findUserById(Integer id);public Integer deleteUserById(Integer id);
- 添加SQL
<update id="updateUser" parameterType="cn.tedu.mybatis.bean.User">update user setusername=#{username},password=#{password},salary=#{salary}whereid=#{id} </update> <select id="findUserById" resultType="cn.tedu.mybatis.bean.User" parameterType="int">SELECTid,username,PASSWORD,salaryFROMUSERWHEREid = #{id} </select> <delete id="deleteUserById" parameterType="int">delete from user where id=#{id} </delete>
- 测试
/*** 测试更新用户信息方法* 1. 查询出用户信息* 2. 更改用户信息*/@Testpublic void testUpdateUser(){SqlSession session = factory.openSession();IUserDao dao = session.getMapper(IUserDao.class);User user=dao.findUserById(10);System.out.println(user);user.setUsername("范XX");int n = dao.updateUser(user);System.out.println(n);session.commit();session.close();}/*** 测试删除用户的方法*/@Testpublic void testDeleteUserById(){SqlSession session=factory.openSession();IUserDao dao=session.getMapper(IUserDao.class);int id=12;int n = dao.deleteUserById(id);System.out.println(n);session.commit();session.close();}
多参数查询
- 声明接口方法
/** * MyBatis中多参数查询 要使用注解 @Param 绑定参数名 * 在SQL中,要使用参数名来绑定参数 #{salary} * @param salary * @param name * @return */ public List<User> findUsersByParam( @Param("salary") Integer salary, @Param("name") String name);
- 声明 SQL
<select id="findUsersByParam" resultType="cn.tedu.mybatis.bean.User"> SELECTid,username,PASSWORD,salary FROMUSER WHEREusername LIKE #{name} andsalary >= #{salary} </select>
- 测试
/*** 测试多参数查询*/@Testpublic void testFindUserByParam(){String name="%a%";Integer salary = 200;SqlSession session=factory.openSession();IUserDao dao=session.getMapper(IUserDao.class);List<User> list=dao.findUsersByParam(salary, name);for (User user : list) {System.out.println(user);}session.close();}
利用Map封装返回部分列
- 声明接口方法
/** * 用Map封装查询结果 * */ public List<Map<String, Object>> findUsersByMap();
- 声明 SQL
<select id="findUsersByMap" resultType="map"> select id, username as name from user </select>
username as name 当使用了别名时候,则别名做为map中的key。 - 测试:
/*** 测试:利用map封装查询结果*/@Testpublic void testFindByMap(){SqlSession session=factory.openSession();IUserDao dao=session.getMapper(IUserDao.class);List<Map<String, Object>> list=dao.findUsersByMap();for (Map<String, Object> map : list) {System.out.println(map);}session.close();}
利用 ${} 实现SQL拼接功能
- 声明 接口方法
/** * 动态拼接SQL */ public List<User> findUsers( @Param("where") String where, @Param("param") Object param);
- 声明 SQL
<select id="findUsers" resultType="cn.tedu.mybatis.bean.User"> select id, username, password, salary from user where ${where} #{param} </select>
- 测试
@Testpublic void testFindUsers(){String where="username like ";Object param="%a%";SqlSession session=factory.openSession();IUserDao dao=session.getMapper(IUserDao.class);List<User> list=dao.findUsers(where, param);for (User user : list) {System.out.println(user);}session.close();}
整合 MyBatis和Spring
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
- 导入相关包
- 添加数据库连接参数文件 db.properties
url=jdbc:mysql://localhost:3306/springmvc driver=com.mysql.jdbc.Driver username=root password= initsize=1 maxsize=5
- 添加Spring 配置文件 applocationContext.xml
<?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:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
<!-- 读取db.properties -->
<util:properties id="dbConfig" location="classpath:db.properties"></util:properties>
<!-- 配置dbcp所需要的bean -->
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="#{dbConfig.driver}"></property>
<property name="url" value="#{dbConfig.url}"></property>
<property name="username" value="#{dbConfig.username}"></property>
<property name="password" value="#{dbConfig.password}"></property>
<property name="initialSize" value="#{dbConfig.initsize}"></property>
<property name="maxActive" value="#{dbConfig.maxsize}"></property>
</bean>
<!-- 利用mybatis-spring配置SqlSessionFactory
FactoryBean 是工厂bean,自动创建SqlSessionFactory
类型的对象,所以配置SqlSessionFactoryBean但返回的
对象类型是SqlSessionFactory
-->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="ds"></property>
<!-- 帮我们加载映射文件 -->
<property name="mapperLocations" value="classpath:mapping/*.xml"></property>
</bean>
<!-- mybatis-spring提供了mapper(dao)接口:自动扫描功能
会自动找到全部的mapper(dao)接口,并且为每个接口创建
一个对象,并且将对象做为Bean存放在Spring容器中,如:、
扫描到IUserDao接口,就会自动创建一个Bean储存到Spring
中,其中Bean id 自动设定为iUserDao
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
<!-- 设置扫描路径 设置扫描位置 -->
<property name="basePackage" value="cn.tedu.mybatis.dao" ></property>
</bean>
</beans>
- 测试:
import java.util.List;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.tedu.mybatis.bean.User;
import cn.tedu.mybatis.dao.IUserDao;
public class MyBatisTestCase {ClassPathXmlApplicationContext ctx;@Beforepublic void init() {ctx =new ClassPathXmlApplicationContext("applicationContext.xml");}/*** 测试由Spring管理的*/@Testpublic void testSqlSessionFactory() {SqlSessionFactory factory =ctx.getBean("sqlSessionFactory",SqlSessionFactory.class);System.out.println(factory);}@Testpublic void testIuserDao() {IUserDao dao = ctx.getBean("IUserDao",IUserDao.class);List<User> list =dao.findAllUsers();System.out.println(dao);for(User user : list) {System.out.println(user);}}
}
3、day08-SSM
SSM应用搭建
1.部署Spring + Spring MVC
- 导入包
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <dependency> <groupId>mysql-connector-java</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.8.RELEASE</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency>
- 配置Spring MVC的前端控制器web.xml:
<servlet> <description></description> <display-name>DispatcherServlet</display-name> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:conf/spring-*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
Spring配置文件村存在conf文件夹中,并且其文件名符合spring - *。xml规则。 - 添加数据库连接参数文件conf / db.properties
url=jdbc:mysql://localhost:3306/tedustore driver=com.mysql.jdbc.Driver user=root password=root initsize=1 maxsize=5
- 添加数据库连接池配置文件spring-db.xml
<?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:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <!-- conf/spring-db.xml 用于管理数据库的连接 --> <!-- 读取conf/db.properties --> <util:properties id="dbConfig" location="classpath:conf/db.properties" /> <!-- 配置DBCP所需的Bean --> <!-- 各property中的name以类中的set方法名称为准 --> <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="#{dbConfig.driver}"/> <property name="url" value="#{dbConfig.url}"/> <property name="username" value="#{dbConfig.user}"/> <property name="password" value="#{dbConfig.password}"/> <property name="initialSize" value="#{dbConfig.initsize}"/> <property name="maxActive" value="#{dbConfig.maxsize}"/> </bean> </beans>
- 添加Spring MVC配置文件spring-mvc.xml:
<?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:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <!-- conf/spring-mvc.xml 用于管理MVC的配置 --> <context:component-scan base-package="cn.tedu.spring" /> <mvc:annotation-driven/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
- 部署测试...
2.部署Spring MyBatis
- 导入包(略)
- 添加Spring MyBatis配置文件spring-mybatis.xml
<?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:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <!-- conf/spring-mybatis.xml 用于管理MVC的配置 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="ds"/> <!-- <property name="mapperLocations" value="classpath:mapping/*.xml"/> --> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> <property name="basePackage" value="cn.tedu.store.dao"/> </bean> </beans>
其中mapperLocations属性被临时注释掉了,再以后有映射文件以后打开。 - 利用JUnit进行离线测试:
public class MyBatisTest {ClassPathXmlApplicationContext ctx;@Beforepublic void init(){ctx = new ClassPathXmlApplicationContext("conf/spring-db.xml","conf/spring-mybatis.xml");}@Testpublic void testSqlSession(){SqlSessionFactory factory=ctx.getBean("sqlSessionFactory",SqlSessionFactory.class);SqlSession session=factory.openSession();System.out.println(session);session.close();} }
实现用户列表功能
数据层
- 数据表结构:
desc user; +-------------+-------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+-------------------+-----------------------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | username | varchar(20) | YES | | NULL | | | password | varchar(30) | YES | | NULL | | | email | varchar(20) | YES | | NULL | | | mobile | varchar(20) | YES | | NULL | | | create_time | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +-------------+-------------+------+-----+-------------------+-----------------------------+
- 添加实体类用户
import java.io.Serializable;public class User implements Serializable {private static final long serialVersionUID = -7291170424207323214L;private Integer id;private String username;private String password;private String mobile;private String email;private Date createTime;public User() {}public User(Integer id, String username, String password, String mobile, String email, Date createTime) {super();this.id = id;this.username = username;this.password = password;this.mobile = mobile;this.email = email;this.createTime = createTime;}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 getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getMobile() {return mobile;}public void setMobile(String mobile) {this.mobile = mobile;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", password=" + password + ", mobile=" + mobile+ ", email=" + email + ", createTime=" + createTime + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((id == null) ? 0 : id.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;User other = (User) obj;if (id == null) {if (other.id != null)return false;} else if (!id.equals(other.id))return false;return true;} }
- 声明道接口
public interface UserDao { /** * 查询全部的用户信息 * @return 用户信息列表 */ List<User> findAllUsers(); }
- 添加映射配置文件映射/ userMapper.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="cn.tedu.store.dao.UserDao"><!-- mapping/userMapper.xml 映射文件 --><!--result: 结果parameter: 参数type: 类型resultType: 用于声明方法的返回结果元素的类型parameterType: 参数的类型,当方法只有一个参数时候使用!如果有更多个参数建议使用 @Param 注解标注--><select id="findAllUsers" resultType="cn.tedu.store.bean.User">SELECTid,username,PASSWORD,mobile,email,create_time AS createTimeFROMUSER </select></mapper>
- 更新db.properties
url=jdbc:mysql://localhost:3306/tedustore
- 更新spring-mybatis.xml
<property name="mapperLocations" value="classpath:mapping/*.xml"/>
- 利用JUnit的进行离线测试
public class UserDaoTest {ClassPathXmlApplicationContext ctx;UserDao dao;@Before //在全部测试案例之前执行的方法public void init(){ctx = new ClassPathXmlApplicationContext("conf/spring-db.xml","conf/spring-mybatis.xml");dao = ctx.getBean("userDao",UserDao.class);}@After //全部测试案例执行之后执行 destory方法public void destory(){ctx.close();}@Testpublic void testFindAllUsers(){List<User> list=dao.findAllUsers();for (User user : list) {System.out.println(user);}} }
2.业务层
- 声明业务层接口
public interface UserService { /** * 获取全部用户信息 * @return 用户信息 */ List<User> list(); }
- 实现业务层
@Service("userService") //当前类是业务层组件 public class UserServiceImpl implements UserService {@Resourceprivate UserDao userDao;public List<User> list() { //调用数据层处理业务return userDao.findAllUsers();} }
- 添加配置文件spring-service.xml
<?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:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <!-- conf/spring-service.xml 用于管理业务层 --> <context:component-scan base-package="cn.tedu.store.service" /> </beans>
- 测试:
public class UserServiceTest {ClassPathXmlApplicationContext ctx;UserService service;@Beforepublic void init(){ctx=new ClassPathXmlApplicati onContext("conf/spring-service.xml","conf/spring-mybatis.xml","conf/spring-db.xml");service = ctx.getBean("userService",UserService.class);}@Afterpublic void destory(){ctx.close();}@Testpublic void testList(){List<User> list=service.list();for (User user : list) {System.out.println(user);}} }
3.控制器和界面
- 添加控制器类
/*** 控制器,用于处理用户有关的业务功能*/ @Controller @RequestMapping("/user") public class UserController {@Resourceprivate UserService userService;@RequestMapping("/users.do")public String users(ModelMap map) {//访问业务层获取全部用户信息List<User> list = userService.list();map.put("users", list);//System.out.println(list);//转发到JSP页面,显示结果return "user/list";} }
- 重用的Servlet项目的界面
- 测试
翻页功能
1.重构数据层
- 重构Dao接口,添加翻页参数和行数统计方法
/** * 查询全部的用户信息 * @return 用户信息列表 */ List<User> findAllUsers( @Param("start") int start, @Param("size") int size); /** * 统计用户的数量 */ int countUsers();
- 在userMapper.xml中声明SQL
<select id="findAllUsers" resultType="cn.tedu.store.bean.User">selectid,username,password,mobile,email,create_time as createTimefromuserlimit #{start},#{size} </select> <select id="countUsers" resultType="int">SELECT count(*) FROM USER </select>
SQL语句需要使用resultType =“int”声明返回值,DML语句不需要声明返回值类型,会自动返回int值。 - 测试
@Testpublic void testFindAllUsers(){List<User> list=dao.findAllUsers(4,4);for (User user : list) {System.out.println(user);}}@Testpublic void testCountUsers(){int n = dao.countUsers();System.out.println(n);}
2.重构业务层
- 重构业务层方法UserService
/** * 获取全部用户信息 * @return 用户信息 */ List<User> list(Integer page);/** * 获取用户信息的页数 */ int listPages();
- 实现方法UserServiceImpl
public List<User> list(Integer page) {if(page==null){page=1;}//计算页面范围int size = 8;int start = (page-1)*size;//调用数据层处理业务return userDao.findAllUsers(start, size);}public int listPages() {int rows = userDao.countUsers();int size = 8;int pages = rows/size;if(rows%size==0){return pages;}return pages+1;}
- 测试
@Testpublic void testList(){List<User> list=service.list(null);for (User user : list) {System.out.println(user);}}@Testpublic void testListPages(){int n = service.listPages();System.out.println(n);}
3.重构控制器
- 重构控制器
@RequestMapping("/users.do")public String users(ModelMap map,@RequestParam(required=false, value="page") Integer page){//访问业务层获取全部用户信息List<User> list=userService.list(page);int pages = userService.listPages();map.put("users", list);map.put("pages", pages);//System.out.println(list);//转发到JSP页面,显示结果return "user/list";}
- JSP页面重用即可
- 测试...
实现添加用户功能
1.显示添加界面
- 在控制器中添加方法,显示添加页面
/** * 在控制器中添加方法,显示添加页面 */ @RequestMapping("/add.do") public String add(){ return "user/add"; }
- 测试
2.实现保存功能
- 添加DAO方法
int insertUser(User user);
- 添加SQL
<insert id="insertUser"parameterType="cn.tedu.store.bean.User"useGeneratedKeys="true"keyProperty="id">insert into user(id,username,password,mobile,email,create_time) values(null,#{username},#{password},#{mobile},#{email},#{createTime}) </insert>
- 测试
@Testpublic void testInsertUser(){User user=new User(null, "Andy","123", "119", "110@tom.com", new Date());int n = dao.insertUser(user);System.out.println(n);}
3.业务层
- 添加业务层方法
User save(String usernane, String password, String mobile, String email);
- 实现业务层方法
public User save(String username,String password, String mobile,String email) {User user=new User(null,username, password, mobile,email, new Date());int n = userDao.insertUser(user);if(n!=1){throw new RuntimeException("添加失败!");}return user;}
- 测试
@Testpublic void testSave(){User user=service.save("Wang","123", "12345678", "wang@tom.com");System.out.println(user);}
4.控制器
- 添加控制器方法
@RequestMapping("/save.do")public String save(String username,String password, String mobile,String email) {User user = userService.save(username, password, mobile, email);return "redirect:users.do";}
- 测试
作业
- 利用SSM实现用户信息的管理。
作者:Darren
QQ:603026148
以上内容归靳烨所有,如果有什么错误或者不足的地方请联系我,希望我们共同进步。
jy-10-SPRINGMYBATIS01——MyBatis-程祖红/刘苍松相关推荐
- 音量计算机的网红音乐,网红音乐10首抖音网红歌,抖音网红歌曲100首BGM精选
抖音是网红聚集地,但同时也诞生了非常多的好听神曲,这些抖音网红歌曲听起来是那么的悦耳,大多都是搭配BGM,那种感觉令人陶醉释压.下面网红音乐10首抖音网红歌,抖音网红歌曲100首BGM精选,快收藏慢慢 ...
- 全新起点!英特尔发布 Agilex FPGA,采用 10 纳米制程 | 极客头条
四月,草长莺飞.桃花烂漫.如此茂盛的季节,给科技行业的新品推出,更加增添了几分喜气. 4月3日,英特尔宣布推出全新产品家族--英特尔® Agilex™ FPGA. 英特尔® Agilex™ FPGA ...
- 范祖红金融消费者权益保护及投诉处理专家
范祖红 金融消费者权益保护及投诉处理专家 助理lte:176 8216 9208 高级经济师 国家三级心理咨询师 省会城市仲裁委员会仲裁员 人民银行消费纠纷调解员 建设银行山东省分行公共关系与企业 ...
- 2019英特尔服务器芯片,英特尔重申2019 年推出10 纳米制程,服务器、FPGA将优先应用...
日前,在外资投资大会上,处理器龙头英特尔(intel)暂代首席执行官 Robert Swan 又重申对 10 纳米制程的规划,确定 2019 年 FPGA 芯片将首先采用 10 纳米制程技术,到了 2 ...
- 开园一个月,热搜近10次。明星网红纷纷打卡,北京环球影城爆火背后的原因是?
随着收入水平的提高,人们对于精神生活的需求更加旺盛,旅游已经从少数人的奢侈品发展成为大众化.经常性消费的生活方式.而随着国庆"十一"假期的到来,选择走出家门背起行囊出门旅游的人更是 ...
- 开园一个月,热搜近10次!明星网红纷纷打卡,北京环球影城爆火背后的原因是?
随着收入水平的提高,人们对于精神生活的需求更加旺盛,旅游已经从少数人的奢侈品发展成为大众化.经常性消费的生活方式.而随着国庆"十一"假期的到来,选择走出家门背起行囊出门旅游的人更是 ...
- 10【Mybatis延迟加载】
文章目录 一.Mybatis 延迟加载 1.1 延迟加载介绍 1.1.1 搭建项目工程 1)SQL脚本: 2)引入依赖: 3)MyBatis核心配置文件: 4)实体类: 5)dao接口: 6)mapp ...
- boot spring 简拼_吐血整理10款,那些网红绝不会告诉你的拍照修图神级APP!
有这么一个公众号 它致力于为你种草全世界的好东西 并且以高兴为终极追求 就连名字都叫「活该高兴」 跟着「活该高兴」 以后你的吃喝玩乐都交给它吧! 既能优雅洋气品位高 也能俏皮好玩接地气 GIF 比如 ...
- 10、mybatis参数处理
文章目录 1.单个参数:mybatis不做任何处理 2.多个参数:mybatis会做特殊处理 3.命名参数:明确指定封装参数时map的key:@Param("id") 3.1 Em ...
最新文章
- 网站关键词密度对SEO优化的重要性
- VUE+WebPack游戏开发:神庙逃亡的游戏设计
- 观察者设计模式二:回调函数
- 增强学习(Reinforcement Learning and Control)
- 系统设计面试题思路综述
- vue组件系列2、拖放上传
- ActiveMQ的简单例子应用
- ioremap,你应该知道的事
- hdu Caocao's Bridges(无向图边双连通分量,找出权值最小的桥)
- 【opencv入门篇】 10个程序快速上手opencv【上】
- Android 异步处理AsyncTask
- 计算机网络及标准化组织
- 360,手机助手的功能,既然有如此二面性?
- ESP8266串口转wifi模块AT指令调试TCP通信
- excel转置怎么操作_原来Excel的复制粘贴有这么多不为人知的用法
- 使用 Bitmap Style Designer 为FMX修改已有样式
- 坚果云下载的文件夹在哪_文件管理软件Zotero+坚果云配置之小白教程,与大家交流...
- 共享换电:车企筑垒,宁王拆墙
- html th中加斜杠,css 模拟表格斜线
- 各大厂家人脸识别对比
热门文章
- linux系统的种类
- POWER BI filter函数的筛选条件可以使用度量值作为筛选条件
- sprintf函数详细解释
- 使用python和opencv进行人脸识别时遇到cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-buil
- 在腾讯,我们如何做 Code Review
- 借助Microsoft Teams进行在线学习小组的组织与管理
- Follow Me: ArcPy(2)
- 美颜sdk算法总概——美白
- 74HC138芯片简析
- 一个保护眼睛的小技巧