springboot初学---mybatis的使用

jar包依赖:

关于mybatis的jar包

<!-- mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

关于的springboot的热部署

<!-- 热部署 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
<!-- 热部署 -->
<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <fork>true</fork>
  </configuration>
</plugin>

1.使用无配置文件注解版的mybatis

<1>.配置文件application.properties

# 使用mybatis连接数据库的配置
spring.datasource.driverClassName =com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/mtest?useUnicode=true&characterEncoding=utf-8
spring.datasource.username =root
spring.datasource.password =

## mybatis配置实体包扫描
mybatis.type-aliases-package=com.example.demo.domain

springboot会自动加载spring.datasource.*相关配置,数据源就会自动注入到sqlSessionFactory中,sqlSessionFactory会自动注入到Mapper中,一切都不用管,直接使用就行了。

<2>.在启动类上添加扫描mapper包的注解

@SpringBootApplication
/**
 * mybatis配置扫描mapper包
 * @author huaye
 *
 */
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

也可以在每个mapper.java类上边添加@Mapper注解,这样的话会很繁琐

<3>.Mapper.java的书写--sql的书写

/**
 * mybatis使用注解的方式连接数据库
 * @author mengjh
 *
 */
public interface UserMapper {
    @Select("SELECT * FROM users")
    @Results({ @Result(property = "userSex", column = "user_sex"),
            @Result(property = "nickName", column = "nick_name") })
    List<UserEntity> getAll();

    @Select("SELECT * FROM users WHERE id = #{id}")
    @Results({ @Result(property = "userSex", column = "user_sex"),
            @Result(property = "nickName", column = "nick_name") })
    UserEntity getOne(int id);

    @Insert("INSERT INTO users(userName,passWord,user_sex,nick_name) VALUES(#{userName}, #{passWord}, #{userSex},#{nickName})")
    void insert(UserEntity user);

    @Update("UPDATE users SET userName=#{userName},nick_name=#{nickName} WHERE id =#{id}")
    void update(UserEntity user);

    @Delete("DELETE FROM users WHERE id =#{id}")
    void delete(Long id);

}

补充的知识点:

sql注解的使用:

  • @Select 是查询类的注解,所有的查询均使用这个
  • @Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。
  • @Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值
  • @Update 负责修改,也可以直接传入对象
  • @delete 负责删除

user_sex属性是用的是枚举类型:

public enum UserSexEnum {
    WOMAN("女"), MAN("男");

    private String sex;

    private UserSexEnum(String sex) {

        this.sex = sex;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

}

关于${}和#{}的区别:

// This example creates a prepared statement, something like select * from teacher where name = ?;
@Select("Select * from teacher where name = #{name}")
Teacher selectTeachForGivenName(@Param("name") String name);

// This example creates n inlined statement, something like select * from teacher where name = 'someName';
@Select("Select * from teacher where name = '${name}'")
Teacher selectTeachForGivenName(@Param("name") String name);

<4>.user的实体类

public class UserEntity implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Integer id;
    private String userName;
    private String passWord;
    private String nickName;
    private String userSex;

    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;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    public UserEntity(Integer id, String userName, String passWord, String nickName, String userSex) {
        super();
        this.id = id;
        this.userName = userName;
        this.passWord = passWord;
        this.nickName = nickName;
        this.userSex = userSex;
    }

    @Override
    public String toString() {
        return "UserEntity [id=" + id + ", userName=" + userName + ", passWord=" + passWord + ", nickName=" + nickName
                + ", userSex=" + userSex + "]";
    }

    public UserEntity() {
        super();
        // TODO Auto-generated constructor stub
    }


}

<5>.使用---controller层

@RestController
public class UserController {
    
    @Autowired
    private UserMapper userMapper;
    
    @RequestMapping("/getUsers")
    public List<UserEntity> getUsers() {
        List<UserEntity> users=userMapper.getAll();
        return users;
    }
    
    @RequestMapping("/getUser")
    public UserEntity getUser(Long id) {
        UserEntity user=userMapper.getOne(id);
        return user;
    }
    
    @RequestMapping("/add")
    public void save(UserEntity user) {
        userMapper.insert(user);
    }
    
    @RequestMapping(value="update")
    public void update(UserEntity user) {
        userMapper.update(user);
    }
    
    @RequestMapping(value="/delete/{id}")
    public void delete(@PathVariable("id") Long id) {
        userMapper.delete(id);
    }
    
    
}

<6>.使用---测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {

    @Autowired
    private UserMapper UserMapper;

    @Test
    public void testInsert() throws Exception {
        UserMapper.insert(new UserEntity(null, "zhangsan", "zs123", "zs", UserSexEnum.WOMAN.getSex()));
        UserMapper.insert(new UserEntity(null, "lisi", "ls123", "ls", UserSexEnum.WOMAN.getSex()));
        UserMapper.insert(new UserEntity(null, "wangwu", "ww123", "ww", UserSexEnum.WOMAN.getSex()));

        //Assert.assertEquals(3, UserMapper.getAll().size());
    }

    @Test
    public void testQuery() throws Exception {
        List<UserEntity> users = UserMapper.getAll();
        System.out.println(users);
    }

    @Test
    public void testUpdate() throws Exception {
        UserEntity user = UserMapper.getOne(3);
        System.out.println(user.toString());
        user.setNickName("neo");
        UserMapper.update(user);
        Assert.assertTrue(("neo".equals(UserMapper.getOne(3).getNickName())));
    }
}

2.使用xml方式配置mybatis

<1>.配置文件application.properties

# 连接数据库使用mybatis

## mybatis使用xml的方式连接数据库
# 指定了mybatis基础配置文件和实体类映射文件的地址 mybatis.config-location=classpath:mybatis/mybatis-config.xml mybatis.mapper-locations=classpath:mybatis/mapper/*.xml ## mybatis配置实体包扫描 mybatis.type-aliases-package=com.example.demo.domain # 使用mybatis连接数据库的配置 spring.datasource.driverClassName =com.mysql.jdbc.Driver spring.datasource.url = jdbc:mysql://localhost:3306/mtest?useUnicode=true
&characterEncoding=utf-8 spring.datasource.username =root spring.datasource.password =

<2>.在启动类上添加扫描mapper包的注解(同上)

<3>.创建并配置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>
        <typeAlias alias="Integer" type="java.lang.Integer" />
        <typeAlias alias="Long" type="java.lang.Long" />
        <typeAlias alias="HashMap" type="java.util.HashMap" />
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
        <typeAlias alias="ArrayList" type="java.util.ArrayList" />
        <typeAlias alias="LinkedList" type="java.util.LinkedList" />
    </typeAliases>
</configuration>

<4>.创建并配置UserMapper_xml.xml配置文件

注意:UserMapper_xml.xml和mybatis-config.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.example.demo.mapper.UserMapper_xml" >
    <resultMap id="BaseResultMap" type="com.example.demo.domain.UserEntity" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="userName" property="userName" jdbcType="VARCHAR" />
        <result column="passWord" property="passWord" jdbcType="VARCHAR" />
        <result column="user_sex" property="userSex" jdbcType="VARCHAR"/>
        <result column="nick_name" property="nickName" jdbcType="VARCHAR" />
    </resultMap>
    
    <sql id="Base_Column_List" >
        id, userName, passWord, user_sex, nick_name
    </sql>

    <select id="getAll" resultMap="BaseResultMap"  >
       SELECT 
       <include refid="Base_Column_List" />
       FROM users
    </select>

    <select id="getOne" parameterType="java.lang.Integer" resultMap="BaseResultMap" >
        SELECT 
       <include refid="Base_Column_List" />
       FROM users
       WHERE id = #{id}
    </select>

    <insert id="insert" parameterType="com.example.demo.domain.UserEntity" >
       INSERT INTO 
               users
               (userName,passWord,user_sex,nick_name) 
           VALUES
               (#{userName}, #{passWord}, #{userSex},#{nickName})
    </insert>
    
    <update id="update" parameterType="com.example.demo.domain.UserEntity" >
       UPDATE 
               users 
       SET 
           <if test="userName != null">userName = #{userName},</if>
           <if test="passWord != null">passWord = #{passWord},</if>
           nick_name = #{nickName}
       WHERE 
               id = #{id}
    </update>
    
    <delete id="delete" parameterType="java.lang.Integer" >
       DELETE FROM
                users 
       WHERE 
                id =#{id}
    </delete>
</mapper>

<5>.创建并编写DAO层代码

public interface UserMapper_xml {

    List<UserEntity> getAll();

    UserEntity getOne(Integer id);

    void insert(UserEntity user);

    void update(UserEntity user);

    void delete(Integer id);
}

<6>.使用(同上)

猜你喜欢

转载自www.cnblogs.com/javamjh/p/10313432.html
今日推荐