Java工具類&常用代碼&知識點集合(持續更新)

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

  1. SqlServer的配置
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost:1433;DatabaseName=JACityGIS0508
username=sa
password=1234
  1. 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配置

項目結構圖

在這裏插入圖片描述

實現代碼

  1. 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>
  1. 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("方法執行後");
    }
}
  1. log.Log.java
package com.syk.log;

public class Log {
    public void before(){
        System.out.println("===============before============");
    }

    public void after(){
        System.out.println("===============after============");
    }
}
  1. 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);
    }
}
  1. 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()+"方法");
    }
}
  1. pojo.User.java
package com.syk.pojo;

public class User {
    private int id;
    private String name;
    private String gender;
}
  1. 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();
}
  1. 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;
    }
}
  1. 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&amp;useSSL=true&amp;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);
    }
}

SpringMVC

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章