常用工具類&代碼&知識點
MyBatis
詳情:IDEA中MyBatis使用記錄 https://blog.csdn.net/qq_37644845/article/details/106085622
一對多、多對一;按查詢嵌套、按結果嵌套
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.syk</groupId>
<artifactId>mybatis-study-03</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>mybatis-01</module>
<module>mybatis-06</module>
<module>mybatis-07</module>
</modules>
<dependencies>
<!-- mysql支持 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!-- junit 測試支持 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- sqlserver支持 -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>8.3.0.jre8-preview</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.6.RELEASE</version>
</dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!-- 導入log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<!-- 靜態資源過濾 -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
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"/>
<settings>
<!-- 開啓並設置日誌工廠 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<typeAlias type="com.syk.pojo.Person" alias="person"/>
</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}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/syk/dao/PersonMapper.xml"/>
<!-- <mapper class="com.syk.dao.PersonMepper"></mapper>-->
</mappers>
</configuration>
<!--
核心配置文件
- mybatis-config.xml
- MyBatis 的配置文件包含了會深深影響 MyBatis 行爲的設置和屬性信息。 配置文檔的頂層結構如下:
properties(屬性)
settings(設置)
typeAliases(類型別名)
typeHandlers(類型處理器)
objectFactory(對象工廠)
plugins(插件)
environments(環境配置)
environment(環境變量)
transactionManager(事務管理器)
dataSource(數據源)
databaseIdProvider(數據庫廠商標識)
mappers(映射器)
-->
db.properties
- SqlServer的配置
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost:1433;DatabaseName=JACityGIS0508
username=sa
password=1234
- MySql的配置
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/testjdbc?useUnicode=true&characterEncoding=utf-8
username=root
password=123456
log4j.properties
#將等級爲DEBUG的日誌信息輸出到console和file兩個目的地
log4j.rootLogger=DEBUG,console,file
#控制檯輸出的相關設置
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#文件輸出的相關配置
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/kuang.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd hh:mm:ss}][%c]%m%n
#日誌輸出級別
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
UserMapper.xml
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">
<mapper namespace="com.syk.dao.UserMapper">
<select id="getUserList" resultType="user">
select * from tb_user
</select>
<insert id="insertUser" parameterType="com.syk.pojo.User">
insert into tb_user(userId,userName,passWord,userRole,userPost) values (#{userId},#{userName},#{passWord},#{userRole},#{userPost})
</insert>
<delete id="deleteUser" parameterType="int">
delete from tb_user where id=#{id}
</delete>
</mapper>
Spring
pom.xml
狂神說微信號
http://mp.weixin.qq.com/mp/homepage?__biz=Mzg2NTAzMTExNg==&hid=3&sn=456dc4d66f0726730757e319ffdaa23e&scene=18#wechat_redirect
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.syk</groupId>
<artifactId>spring-study-02</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>demo-01-javaconfig</module>
<module>demo-02</module>
<module>spring-aop</module>
<module>spring-03-mybatis-01</module>
<module>spring-03-mybatis-02</module>
<module>spring-03-mybatis-03-transaction</module>
</modules>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!-- 使用事務必須導入的包 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
</dependencies>
</project>
ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
">
<context:annotation-config/><!--開啓註解注入bean-->
<bean id="cat" class="com.syk.pojo.Cat"/>
<bean id="dog" class="com.syk.pojo.Dog"/>
<bean id="people" class="com.syk.pojo.People"/>
</beans>
MyConfig.java Java配置類
package com.syk.config;
import com.syk.pojo.BigMaster;
import com.syk.pojo.Cat;
import com.syk.pojo.Child;
import com.syk.pojo.Parent;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(value={"com.syk.pojo"})
public class MyConfig {
// 顯示的聲明對象
@Bean
public Child getChild(){
Child c= new Child();
c.setName("小明同學");
return c;
}
@Bean
public Parent getParent(Child child) {
Parent p= new Parent();
p.setMychild(child);
return p;
}
@Bean
public BigMaster getBigMaster(Cat cat){
BigMaster b=new BigMaster();
b.setCat(cat);
return b;
}
@Bean
public BigMaster getBigMaster2(){
BigMaster b=new BigMaster();
b.setCat(new Cat());
return b;
}
}
使用配置類
import com.syk.pojo.*;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.syk.config.MyConfig;
public class Test01 {
@Test
public void stest01(){// 測試 Mater(使用 #Component) 和 Cat(使用 #Component)
ApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);
Master master = context.getBean("master", Master.class);
System.out.println(master);
Cat cat=context.getBean("cat", Cat.class);
System.out.println(cat);
System.out.println("============");
System.out.println(cat==master.getCat());
/*
Master{cat=Cat{name='小花貓'}}
Cat{name='小花貓'}
============
true
*/
}
@Test
public void stest02(){// 測試 Parent(使用 @Bean ) 和 Child(使用 @Bean ) // 測試配置類中 使用 @Bean 配置的類
ApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);
Child getChild = context.getBean("getChild", Child.class);
Child getChild2 = context.getBean("getChild", Child.class);
System.out.println(getChild);
System.out.println(getChild==getChild2);
System.out.println("---------------------------------");
Parent getParent = context.getBean("getParent", Parent.class);
System.out.println(getParent);
System.out.println(getParent.getMychild()==getChild);
/*
Child{name='小明同學'}
true
---------------------------------
Parent{mychild=Child{name='小明同學'}}
true
*/
}
@Test
public void stest03(){// 測試 BigMaster (使用 @Bean ) 和 Cat (使用 #Component)
ApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);
BigMaster getBigMaster = context.getBean("getBigMaster", BigMaster.class);
Cat cat=context.getBean("cat", Cat.class);
System.out.println(cat);
System.out.println("============");
System.out.println(cat==getBigMaster.getCat());
/*
Cat{name='小花貓'}
============
true
*/
}
@Test
public void stest04(){// 測試 BigMaster (使用 @Bean ) 和 Cat (使用 #Component)
ApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);
BigMaster getBigMaster = context.getBean("getBigMaster2", BigMaster.class);
Cat cat=context.getBean("cat", Cat.class);
System.out.println("============");
System.out.println(cat==getBigMaster.getCat());
System.out.println("--------------------");
BigMaster getBigMaster2 = context.getBean("getBigMaster2", BigMaster.class);
System.out.println(getBigMaster2==getBigMaster);
/*
Cat{name='小花貓'}
============
false
*/
}
}
SpringAOP配置
項目結構圖
實現代碼
- ApplicationContext.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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd
">
<!-- <bean id="logAfter" class="com.syk.log.LogAfter"/>
<bean id="logBefore" class="com.syk.log.LogBefore"/>-->
<bean id="log" class="com.syk.log.Log"/>
<bean id="userServiceImpl" class="com.syk.service.UserServiceImpl"/>
<aop:aspectj-autoproxy/>
<bean id="logAnnotation" class="com.syk.diy.LogAnnotation"/>
<!-- 方式一-->
<!--
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.syk.service.UserService.*(..))"/>
<aop:advisor advice-ref="logAfter" pointcut-ref="pointcut"/>
<aop:advisor advice-ref="logBefore" pointcut-ref="pointcut"/>
</aop:config>
-->
<!--方式二-->
<!--<aop:config>
<aop:aspect ref="log">
<aop:pointcut id="pointcut" expression="execution(* com.syk.service.UserService.*(..))"/>
<aop:before method="before" pointcut-ref="pointcut"/>
<aop:after method="after" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>-->
</beans>
- diy.LogAnnotation.java
package com.syk.diy;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class LogAnnotation {
@Before("execution(* com.syk.service.UserService.*(..))")
public void before(){
System.out.println("方法執行前");
}
@After("execution(* com.syk.service.UserService.*(..))")
public void after(){
System.out.println("方法執行後");
}
}
- log.Log.java
package com.syk.log;
public class Log {
public void before(){
System.out.println("===============before============");
}
public void after(){
System.out.println("===============after============");
}
}
- log.LogAfter.java
package com.syk.log;
import org.springframework.aop.AfterReturningAdvice;
import java.lang.reflect.Method;
public class LogAfter implements AfterReturningAdvice {
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
System.out.println("[debug][end]"+method.getName()+"方法執行後,返回結果爲:"+returnValue);
}
}
- log.LogBefore.java
package com.syk.log;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
public class LogBefore implements MethodBeforeAdvice {
public void before(Method method, Object[] args, Object target) throws Throwable {
System.out.println("[debug]進入了"+method.getName()+"方法");
}
}
- pojo.User.java
package com.syk.pojo;
public class User {
private int id;
private String name;
private String gender;
}
- service.UserService.java
package com.syk.service;
import com.syk.pojo.User;
import java.util.List;
public interface UserService {
boolean add(User user);
boolean delete(int id);
boolean update(User user);
List<User> getUserList();
}
- service.UserServiceImpl.java
package com.syk.service;
import com.syk.pojo.User;
import java.util.List;
public class UserServiceImpl implements UserService {
public boolean add(User user) {
System.out.println("成功添加了一條記錄");
return false;
}
public boolean delete(int id) {
System.out.println("成功刪除了一條記錄");
return false;
}
public boolean update(User user) {
System.out.println("成功更新了一條記錄");
return false;
}
public List<User> getUserList() {
System.out.println("成功查詢了一條記錄");
return null;
}
}
- MyTest.java
import com.syk.service.UserService;
import com.syk.service.UserServiceImpl;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
@Test
public void test01() {
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserService userService = context.getBean("userServiceImpl", UserService.class);
userService.add(null);
}
}
MyBatis-Spring
applicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="spring-dao.xml"/>
<bean id="userMapper" class="com.syk.mapper.UserMapperImpl">
<property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
</bean>
<!-- <bean id="userMapper2" class="com.syk.mapper.UserMapperImpl2">-->
<!-- <property name="sqlSessionFactory" ref="sqlSessionFactory"/>-->
<!-- </bean>-->
<!-- 繼承了 SqlSessionDaoSupport 的類-->
<bean id="userMapper3" class="com.syk.mapper.UserMapperImpl3">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
spring-dao.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:xs="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url"
value="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&useSSL=true&charset=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="mybatis-config.xml"/>
<!-- <property name="mapperLocations" value="classpath:com/syk/mapper/*.java"/>-->
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" index="0" ref="sqlSessionFactory"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource"/>
</bean>
<xs:advice id="txAdvice" transaction-manager="transactionManager">
<xs:attributes>
<xs:method name="add" propagation="REQUIRED"/>
<xs:method name="*" propagation="REQUIRED"/>
</xs:attributes>
</xs:advice>
<aop:config proxy-target-class="true">
<aop:pointcut id="txPointCut" expression="execution(* com.syk.mapper.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
</beans>
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>
<typeAliases>
<package name="com.syk.pojo"/>
</typeAliases>
<mappers>
<mapper class="com.syk.mapper.UserMapper"/>
<mapper class="com.syk.mapper.UserMapper2"/>
</mappers>
</configuration>
Mapper
package com.syk.mapper;
import com.syk.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface UserMapper {
@Select(" select * from users ")
List<User> getUserList();
@Select(" select * from users where id=#{id} ")
User getUserById(@Param("id") int id);
}
注:也可以不使用註解,使用Mapper.xml配合開發
MapperImpl
使用SqlSessionDaoSupport
package com.syk.mapper;
import com.syk.pojo.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import java.util.List;
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper {
public List<User> getUserList() {
return getSqlSession().getMapper(UserMapper.class).getUserList();
}
public User getUserById(int id) {
return getSqlSession().getMapper(UserMapper.class).getUserById(id);
}
}
MapperImpl
package com.syk.mapper;
import com.syk.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;
import java.util.List;
public class UserMapperImpl implements UserMapper {
private SqlSessionTemplate sqlSessionTemplate;
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSessionTemplate = sqlSessionTemplate;
}
public List<User> getUserList() {
UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
return mapper.getUserList();
}
public User getUserById(int id) {
UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
return mapper.getUserById(id);
}
}