A framework that indirectly accesses DB from Java by mapping SQL and Java objects. As a feature, by declaratively defining SQL in configuration files and annotations, Being able to hide the existence of SQL itself from business logic written in Java.
The Mapper interface hides SQL, and MyBatis links the methods of the Mapper interface with SQL. Therefore, from Java business logic, you can execute the linked SQL just by calling the Mapper interface.
・ Eclipse 2018-09 (4.9.0) ・ Windows 10 ・ H2 -There are two ways to specify SQL in MyBatis: "mapping file" and "annotation". This time, we will use a "mapping file".
pom.xml
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis</artifactId>
		    <version>3.4.0</version>
		</dependency>
MybatisTestApplication.java
@SpringBootApplication
@EnableTransactionManagement
@MapperScan("com.mybatis.test.domain")
public class MybatisTestApplication {
	//Spring Boot startup method
	public static void main(String[] args) {
		SpringApplication.run(MybatisTestApplication.class, args);
	}
	//Bean definition data source ①
	@Bean
	public DataSource dataSource() {
		return new EmbeddedDatabaseBuilder()
				.setType(EmbeddedDatabaseType.H2)
				.addDefaultScripts()
				.build();
	}
	//Bean definition PlatformTransactionManager②
	@Bean
	public PlatformTransactionManager transactionManager() {
		return new DataSourceTransactionManager(dataSource());
	}
	//Bean definition SqlSessionFactoryBean ③
	@Bean
	public SqlSessionFactoryBean sqlSessionFactory() {
		SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
		sessionFactoryBean.setDataSource(dataSource());
		return sessionFactoryBean;
	}
** ① Data source ** Define a bean for the data source.
②PlatformTransactionManager Define a transaction manager bean.
③SqlSessionFactoryBean SqlSessionFactory is generated using SqlSessionFactoryBean. If you set the data source and issue SQL in the processing of MyBatis, from the data source specified here The connection is acquired.
-Creating a Mapper interface -Creating a mapping file
MyBatisMapper.java
package com.mybatis.test.domain;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
//By adding this annotation, it will be recognized as a Mapper interface by the program.
@Mapper
public interface MyBatisMapper {
	//For testing SELECT
	public PlayerEntity selectTest(String id);
	//For testing INSERT
	public void insertTest(@Param("id")String id, @Param("name")String name, @Param("age")String age);
	//For testing UPDATE
	public void updateTest(@Param("id")String id, @Param("name")String name);
	//For testing DELETE
	public void deleteTest(String id);
}
MyBatisMapper.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.mybatis.test.domain.MyBatisMapper">
	<!--id attribute is the method name defined in the Mapper interface-->
	<!--The parameterType attribute is the method argument class-->
	<!--resultType attribute is a class that maps search results-->
  	<select id="selectTest" parameterType="string" resultType="com.mybatis.test.domain.PlayerEntity">
  	  SELECT
  	   id,name,age
   	  FROM
   	   player
   	  WHERE
   	   id=#{id}
  	</select>
  	<insert id="insertTest" parameterType="string" >
  	  INSERT INTO
  	   player (id, name, age)
  	  VALUES
  	   (#{id}, #{name}, #{age})
  	</insert>
  	<update id="updateTest" parameterType="string">
  	 UPDATE
  	  player
  	 SET
  	  name=#{name}
  	 WHERE
  	  id=#{id}
  	</update>
  	<delete id="deleteTest" parameterType="string">
  	 DELETE FROM player WHERE id=#{id}
  	</delete>
</mapper>
** XML is in the same location as the folder where the Mapper interface is placed in src / main / resources.  Place them with the same name! **
** By doing this, MyBatis will automatically read the mapping file. **
-Service class ・ Controller class ・ Entity class
Service
package com.mybatis.test.domain;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class MyBatisService {
	@Autowired
	MyBatisMapper mapper;
	@Autowired
	PlayerRepository playerRepository;
	//Call the Mapper method that performs SELECT
	@Transactional
	public PlayerEntity selectTest(String id) {
		return mapper.selectTest(id);
	}
	//Call the Mapper method that performs INSERT
	@Transactional
	public void insertTest(String id, String name, String age) {
		mapper.insertTest(id, name, age);
	}
	//Call the Mapper method that performs UPDATE
	@Transactional
	public void updateTest(String id, String name) {
		mapper.updateTest(id, name);
	}
	//Call the Mapper method to do DELETE
	@Transactional
	public void deleteTest(String id) {
		mapper.deleteTest(id);
	}
Controller
package com.mybatis.test.domain;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class MybatisController {
	@Autowired
	MyBatisService myBatisService;
	@GetMapping()
	public String index(Model model) {
		PlayerEntity playerService = new PlayerEntity();
		playerService = myBatisService.selectTest("004");
		model.addAttribute("play", playerService);
		myBatisService.insertTest("010", "XXXX", "65");
		myBatisService.updateTest("004", "SSSSSS");
		myBatisService.deleteTest("001");
		return "index";
	}
Omitted below
Entity
package com.mybatis.test.domain;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class PlayerEntity {
	@Id
	private String id;
	private String name;
	private String age;
getter,setter omitted
Next, I would like to make JOIN and SQL statements more complicated and play around with them.
Recommended Posts