MyBatis creates stored procedure instance code _ power node Java College collates

  • 2020-09-28 08:53:25
  • OfStack

Other tools or techniques needed:

Project management tool: Maven

Test run tool: Junit

Database: Derby

There are two parts to this section. Part 1 is how to create a stored procedure in Derby, and part 2 is how to call a stored procedure in Mybatis

1. Create stored procedures in Derby

Create a new common Java project in Eclipse and name it Test_Store_Procedure

Create 1 Class under com.bjpowernode.practice and name it ES30en.class


package com.bjpowernode.practice; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 
/** 
 * 
 *  Stored procedure class  
 * 
 * @author Freud 
 * 
 */ 
public class StoreProcedureOperationClass 
{ 
  /** 
   * 
   *  Execute the inserted stored procedure  
   * 
   * @param id 
   * @param username 
   * @param password 
   * @param nickname 
   * @throws SQLException 
   */ 
  public static void insertData(int id, String username, String password, String nickname) throws SQLException 
  { 
    Connection connection = DriverManager.getConnection("jdbc:default:connection"); 
    PreparedStatement p = 
        connection.prepareStatement("INSERT INTO USER_TEST_TB(ID,USERNAME,PASSWORD,NICKNAME) VALUES(?,?,?,?)"); 
    p.setInt(1, id); 
    p.setString(2, username); 
    p.setString(3, password); 
    p.setString(4, nickname); 
    System.out.println("INSERT VALUES (id=" + id + ",username=" + username + ",password=" + password + ",nickname=" 
        + nickname + ")"); 
    p.executeUpdate(); 
    p.close(); 
    connection.close(); 
  } 
} 

3. Use the jar command or Eclipse tool to export to C:\freud\ Test_ES40en_Procedure.jar

4. Declare stored procedures on the ij command line


CREATE PROCEDURE FREUD.INSERT_USER(IN THE_ID INTEGER,  
         IN THE_USERNAME VARCHAR(20), IN THE_PASSWORD VARCHAR(20), IN THE_NICKNAME VARCHAR(20))  
PARAMETER STYLE JAVA MODIFIES SQL DATA LANGUAGE JAVA  
EXTERNAL NAME 'com.bjpowernode.practice.StoreProcedureOperationClass.insertData'; 
  in  ij  Call from the console call sqlj.install_jar('C:\freud\Test_Store_Procedure.jar', 'FREUD.TEST_SPROCEDURE', 0); will  jar  Package imported into the  FREUD Schema, and name it TEST_SPROCEDURE . 

6. Call from the ij console call SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath', 'FREUD.TEST_SPROCEDURE'); Add the jar package to the database classpath search path.

This completes the creation of the Derby stored procedure

2. Call the stored procedure in Mybatis


Maven Dependencies:
<dependencies> 
    <dependency> 
      <groupId>org.mybatis</groupId> 
      <artifactId>mybatis</artifactId> 
      <version>3.2.7</version> 
    </dependency> 
    <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.9</version> 
      <scope>test</scope> 
    </dependency> 
    <dependency> 
      <groupId>org.apache.derby</groupId> 
      <artifactId>derby</artifactId> 
      <version>10.10.2.0</version> 
    </dependency> 
    <dependency> 
      <groupId>org.apache.derby</groupId> 
      <artifactId>derbyclient</artifactId> 
      <version>10.10.2.0</version> 
    </dependency> 
  </dependencies> 

Mybatis profile src/main/resource source directory


test-mybatis-configuration.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> 
    <property name="driver" value="org.apache.derby.jdbc.ClientDriver" /> 
    <property name="url" 
      value="jdbc:derby://localhost:1527/freud;create=true" /> 
  </properties> 
  <environments default="development"> 
    <environment id="development"> 
      <transactionManager type="JDBC" /> 
      <dataSource type="POOLED"> 
        <property name="driver" value="${driver}" /> 
        <property name="url" value="${url}" /> 
      </dataSource> 
    </environment> 
  </environments> 
  <mappers> 
    <mapper resource="com/freud/practice/UserMapper.xml" /> 
  </mappers> 
</configuration>  

User. java object classes (src/main/java/com/freud/practice directory)


package com.bjpowernode.practice; 
public class User 
{ 
  private Integer id; 
  private String username; 
  private String password; 
  private String nickname; 
  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 getNickname() 
  { 
    return nickname; 
  } 
  public void setNickname(String nickname) 
  { 
    this.nickname = nickname; 
  } 
} 

UserMapper. xml Mapper file (src/main/java/com. bjpowernode. practice directory)


<?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.bjpowernode.practice.UserMapper">  
  <!--  The query  --> 
  <select id="getUser" resultType="com.bjpowernode.practice.User"> 
    select * 
    from USER_TEST_TB 
  </select>    
  <!--  Calls the inserted stored procedure  --> 
  <insert id="insertUser" statementType="CALLABLE"> 
    CALL FREUD.INSERT_USER(#{id},#{username},#{password},#{nickname}) 
  </insert> 
</mapper>  

UserMapper. java Mapper class (src/main/java/com. bjpowernode. practice directory)


package com.bjpowernode.practice; 
import java.util.List; 
public interface UserMapper 
{ 
  public List<User> getUser(); 
  public void insertUser(User user); 
 
} 

The test class TestMyBatis. java (src/test/java/com. bjpowernode. practice directory)


package com.bjpowernode.practice; 
import java.io.InputStream; 
import java.text.MessageFormat; 
import java.util.List; 
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; 
public class TestMyBatis 
{ 
  private String source; 
  private InputStream inputStream; 
  private SqlSessionFactory sqlSessionFactory; 
  @Before 
  public void setUp() 
  { 
    /** 
     *  To prepare Mybatis Runtime environment  
     */ 
    source = "test-mybatis-configuration.xml"; 
    inputStream = TestMyBatis.class.getClassLoader().getResourceAsStream(source); 
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 
  } 
  @Test 
  public void testInsert() 
  { 
    try 
    { 
      //  To obtain Session The connection  
      SqlSession session = sqlSessionFactory.openSession(); 
      //  To obtain Mapper 
      UserMapper userMapper = session.getMapper(UserMapper.class); 
      System.out.println("Test insert start..."); 
      //  Display before insertion User information  
      System.out.println("Before insert"); 
      this.printUsers(userMapper.getUser()); 
      //  An insert  
      userMapper.insertUser(this.mockUser("FREU_INS_USER", "FREUD_INS_PASS", "FREUD_INS_NICK")); 
      //  Commit the transaction  
      session.commit(); 
      //  After display is inserted User information  
      System.out.println("\r\nAfter insert"); 
      this.printUsers(userMapper.getUser()); 
      System.out.println("Test insert finished..."); 
    } 
    catch (Exception e) 
    { 
      e.printStackTrace(); 
    } 
  } 
  /** 
   * 
   *  The assembly 1 a User object  
   * 
   * @return 
   */ 
  public User mockUser(String username, String password, String nickname) 
  { 
    User user = new User(); 
    user.setId(50); 
    user.setUsername(username); 
    user.setPassword(password); 
    user.setNickname(nickname); 
    return user; 
  } 
  /** 
   * 
   *  Print user information to the console  
   * 
   * @param users 
   */ 
  private void printUsers(final List<User> users) 
  { 
    int count = 0; 
    for (User user : users) 
    { 
      System.out.println(MessageFormat.format("==User[{0}]=================", ++count)); 
      System.out.println("User Id: " + user.getId()); 
      System.out.println("User UserName: " + user.getUsername()); 
      System.out.println("User Password: " + user.getPassword()); 
      System.out.println("User nickname: " + user.getNickname()); 
    } 
  } 
} 

conclusion


Related articles: