前言:這個文章的定位不是實現的步驟,而是實現過程中遇到的問題。並且我寫的步驟是別人的步驟的記錄,算不了什麼,後面對使用過程中遇到的問題以及解決的方法纔是自己寫的,有價值的地方。
寫這篇文章的出發點一個是爲了保障自己學以致用,一個是查漏補缺。
而且很多教程雖然說按照那個步驟可以成功,但也可能不成功,要麼是自己操作有誤,要麼是版本變了,還有可能自己基礎沒學好,前置知識不夠。我最開始寫Java的時候連創建父類和接口類都不會,直接創建一個類,然後複製粘貼,最後報錯。僵硬~
寫這類博客,即寫步驟,又寫操作過程中遇到的問題,然後從中吸取教訓,可以讓成功的概率更大。
同時sprig框架學習我打算按照五部分(IOC、bean、AOP、數據庫、事務)進行梳理,最後加個綜合大應用。學前在注意的情況下,會寫前置知識。
Java基礎:https://blog.csdn.net/weixin_42875245/article/details/105951858
IDE使用:https://blog.csdn.net/weixin_42875245/article/details/105867499
Spring學習筆記:https://blog.csdn.net/weixin_42875245/article/details/105631818
Spring見解:https://blog.csdn.net/Haidaiya/article/details/105611801
Spring使用:https://blog.csdn.net/weixin_42875245/article/details/106034031
Mybatis學習筆記:https://blog.csdn.net/weixin_42875245/article/details/105631915
數據庫基礎:https://blog.csdn.net/weixin_42875245/article/details/105786562
MySQL和Navicat的安裝與使用
https://blog.csdn.net/weixin_42875245/article/details/105912850
https://blog.csdn.net/weixin_42875245/article/details/105913078
一、引入包
1在eclipse基礎開發環境創建一個mybatistest01的動態web項目,將mybatis的核心包、依賴包以及MySQL的驅動包複製到lib目錄中,併發布到類路徑下。
二、創建數據庫
1在MySQL中創建數據庫。
Create database db_mybatis;
User db_mybatis;
Create table t_user(id int(32) primary key auto_increment,username varchar(50),jobs varchar(50),phone varchar(16));
Insert into t_user values (1,’one’,’teacher’,’1111’);
Insert into t_user values (2,’two’,’doctor’,’2222’);
Insert into t_user values (3,’three’,’student’,’3333’);
三、動態SQL
1在src目錄下創建log4j.properties文件;代碼如下。
2在src目錄下創建db.properties;代碼如下。
3配置文件mybatis-config.xml。代碼如下
4在src目錄下創建com.ssm.util包,在包中創建工具類mybatisUtil。代碼如下:
5在src目錄下創建com.ssm.po包,在包中創建持久化類User。代碼如下
6在src目錄下創建com.ssm.mapper包,在包中創建映射文件UserMapper.xml。代碼如下。
7在src目錄下創建com.ssm.test包,在包中創建測試類MybatisTest。
8運行:用Junit運行,可以實現查找、
四、實驗
1數據庫的操作就不贅述了,
https://blog.csdn.net/weixin_42875245/article/details/105912850
2創建log4j.properties
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.ssm=DEBUG
Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3創建db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3308/db_mybatis
jdbc.username=root
jdbc.password=root
4創建mybatis-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 resource="db.properties" />
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<!--數據庫驅動 -->
<property name="driver" value="${jdbc.driver}" />
<!--連接數據庫的ur1 -->
<property name="url" value="${jdbc.url}" />
<!--連接數據庫的用戶名 -->
<property name="username" value="${jdbc.username}" />
<!--連接數據庫的密碼-->
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ssm/mapper/UserMapper.xml" />
</mappers>
</configuration>
5創建UserMapper
<?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.ssm.mapper.UserMapper">
<!--<bind>元素的使用:根據用戶姓名模糊查詢用戶信息 -->
<select id="findUserByName2" parameterType="com.ssm.po.User" resultType="com.ssm.po.User">
<!--_parameter.getUsername()也可以直接寫成傳入的字段屬性名,即username -->
<bind name="p_username" value="'%'+_parameter.getUsername()+'%'"/>
select * from t_user
where username like #{p_username}
</select>
<!--<foreach>元素使用 -->
<select id="findUserByIds" parameterType="List" resultType="com.ssm.po.User">
select * from t_user where id in
<foreach item="id" index="index" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<!--<choose>(<when>、<otherwise>)元素使用 -->
<select id="findUserByNameOrJobs" parameterType="com.ssm.po.User" resultType="com.ssm.po.User">
select * from t_user where 1=1
<choose>
<when test="username !=null and username !=''">
and username like concat('%',#{username},'%')
</when>
<when test="jobs !=null and jobs !=''">
and jobs=#{jobs}
</when>
<otherwise>
and phone is not null
</otherwise>
</choose>
</select>
<!--<if>、<where>元素使用 -->
<select id="findUserByNameAndJobs" parameterType="com.ssm.po.User" resultType="com.ssm.po.User">
select * from t_user
<where>
<if test="username !=null and username !=''">
and username like concat('%',#{username},'%')
</if>
<if test="jobs !=null and jobs !=''">
and jobs=#{jobs}
</if>
</where>
</select>
<!--
<if>、<trim>元素使用
<select id="findUserByNameAndJobs" parameterType="com.ssm.po.User" resultType="com.ssm.po.User">
select * from t_user
<trim prefix="where" prefixOverrides="and">
<if test="username !=null and username !=''">
and username like concat('%',#{username},'%')
</if>
<if test="jobs !=null and jobs !=''">
and jobs=#{jobs}
</if>
</trim>
</select>
-->
<!--
<if>元素使用
<select id="findUserByNameAndJobs" parameterType="com.ssm.po.User" resultType="com.ssm.po.User">
select * from t_user where 1=1
<if test="username !=null and username !=''">
and username like concat('%',#{username},'%')
</if>
<if test="jobs !=null and jobs !=''">
and jobs=#{jobs}
</if>
</select>
-->
<!--根據用戶編號獲取用戶信息 -->
<select id="findUserById" parameterType="Integer" resultType="com.ssm.po.User">
select * from t_user where id=#{id}
</select>
<!--根據用戶名模糊查詢用戶信息 -->
<select id="findUserByName" parameterType="String" resultType="com.ssm.po.User">
select * from t_user where username like '%${value}%'
</select>
<!--添加客戶信息 -->
<insert id="addUser" parameterType="com.ssm.po.User">
insert into t_user(username,jobs,phone) values(#{username},#{jobs},#{phone})
</insert>
<!--更新用戶信息 -->
<update id="updateUser" parameterType="com.ssm.po.User">
update t_user set username=#{username},jobs=#{jobs},phone=#{phone} where id=#{id}
</update>
<!--
更新用戶信息
<update id="updateUser" parameterType="com.ssm.po.User">
update t_user
<set>
<if test="username !=null and username !=''">
username=#{username}
</if>
<if test="jobs !=null and jobs !=''">
jobs=#{jobs}
</if>
<if test="phone !=null and phone !=''">
phone=#{phone}
</if>
</set>
where id=#{id}
</update>
-->
<!--刪除用戶信息-->
<delete id="deleteUser" parameterType="Integer">
delete from t_user where id=#{id}
</delete>
</mapper>
6創建持久對象User
package com.ssm.po;
public class User {
private Integer id;
private String username;
private String jobs;
private String phone;
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 getJobs() {
return jobs;
}
public void setJobs(String jobs) {
this.jobs = jobs;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String toString() {
return "User [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]";
}
}
7創建工具類
package com.ssm.util;
import java.io.IOException;
import java.io.InputStream;
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;
public class MybatisUtils{
private static SqlSessionFactory sqlSessionFactory=null;
static{
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
8創建測試類
package com.ssm.test;
import java.io.InputStream;
import java.util.ArrayList;
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.Test;
import com.ssm.po.User;
import com.ssm.util.MybatisUtils;
public class MybatisTest {
/*
* 根據用戶姓名模糊查詢用戶信息
*/
@Test
public void findUserByName2(){
SqlSession sqlSession = MybatisUtils.getSession();
User user=new User();
user.setUsername("s");
List<User> users = sqlSession.selectList("com.ssm.mapper.UserMapper.findUserByName2", user);
for (User u : users) {
System.out.println(u.toString());
}
sqlSession.close();
}
/*
* 根據用戶編號批量查詢用戶信息
*/
@Test
public void findUserByIdsTest(){
SqlSession sqlSession = MybatisUtils.getSession();
List<Integer> ids=new ArrayList<Integer>();
ids.add(1);
ids.add(2);
List<User> users = sqlSession.selectList("com.ssm.mapper.UserMapper.findUserByIds", ids);
for (User user : users) {
System.out.println(user.toString());
}
sqlSession.close();
}
/*
* 根據用戶姓名或者職業組合條件查詢用戶信息列表
*/
@Test
public void findUserByNameOrJobsTest() throws Exception {
SqlSession sqlSession = MybatisUtils.getSession();
User user=new User();
//user.setUsername("zhangsan");
//user.setJobs("teacher");
List<User> users = sqlSession.selectList("com.ssm.mapper.UserMapper.findUserByNameOrJobs", user);
for (User u : users) {
System.out.println(u.toString());
}
sqlSession.close();
}
/*
* 根據用戶姓名和職業組合條件查詢用戶信息列表
*/
@Test
public void findUserByNameAndJobsTest() throws Exception {
//通過工具類生成sqlSession對象
SqlSession sqlSession = MybatisUtils.getSession();
//創建User對象,封裝需要組合查詢的條件
User user=new User();
user.setUsername("zhangsan");
user.setJobs("teacher");
//執行sqlSession的查詢方法,返回結果集
List<User> users = sqlSession.selectList("com.ssm.mapper.UserMapper.findUserByNameAndJobs", user);
for (User u : users) {
System.out.println(u.toString());
}
sqlSession.close();
}
@Test
public void findUserByIdTest() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("com.ssm.mapper.UserMapper.findUserById", 1);
System.out.println(user.toString());
sqlSession.close();
}
@Test
public void findUserByNameTest() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> users = sqlSession.selectList("com.ssm.mapper.UserMapper.findUserByName", "g");
for (User user : users) {
System.out.println(user.toString());
}
sqlSession.close();
}
@Test
public void addUserTest() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setUsername("tom");
user.setJobs("worker");
user.setPhone("1234554321");
int rows = sqlSession.insert("com.ssm.mapper.UserMapper.addUser", user);
if (rows > 0) {
System.out.println("成功添加" + rows + "條數據!");
} else {
System.out.println("添加數據失敗!");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void updateUserTest() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setId(4);
user.setUsername("tom");
user.setJobs("teacher");
user.setPhone("5432112345");
int rows = sqlSession.update("com.ssm.mapper.UserMapper.addUser", user);
if (rows > 0) {
System.out.println("成功修改了" + rows + "條數據!");
} else {
System.out.println("修改數據失敗!");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteUserTest() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int rows = sqlSession.delete("com.ssm.mapper.UserMapper.deleteUser", 4);
if (rows > 0) {
System.out.println("成功刪除了" + rows + "條數據!");
} else {
System.out.println("刪除數據失敗!");
}
sqlSession.commit();
sqlSession.close();
}
}
結論:沒遇到問題