IDE下springboot+mybatis整合(1)

orm框架本质是简化操作数据库的编码,一个是不用写sql的hibernate,一个是灵活调试的mybatis,各自都有优缺点。

hibernate优点就是用java替代sql语句,发展到现在是用spring data jpa这个,根据方法名就可以生成对应sql,这个下次看情况可以学一学;

mybatisc一开始初期会比较麻烦,各种配置,还有xml文件,从generator根据表结果自动生成实体类、配置文件和dao(也就是mapper,那个接口文件啦)到后来使用注解,自动管理dao层和配置文件以及只用注解不用配置的形式。

这里我根据看过的博客总结一下这两种方法。一个无注解版和一个最简xml配置版。

主要用到的一个依赖就是这个

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

首先我们搭一个spring-boot框架(参考我的另一篇)

在这里我们不仅要mybatis,还要连数据库,数据库要添加表,添加的依赖还有

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

首先开始说一下无注解版


建需要的文件,controller,entity,mapper,service,enums(是因为表里男女枚举)

1.application.properties

配置mybatis以及数据库

server.port=8087
server.tomcat.uri-encoding=utf-8


mybatis.type-aliases-package=com.example.demo.entity

#springboot会自动加载spring.datasource.*相关配置,
#数据源就会自动注入到sqlSessionFactory中,sqlSessionFactory会自动注入到Mapper中,对了你一切都不用管了,直接拿起来使用就行了
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = 1234
如果是yml的话数据库这样配的
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mytest
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver

2.不要忘记在启动类扫描mapper包,所以还是先写好以便忘了


3.最重要的mapper

//最关键的一块,sql生产都在这里  这里的方法名都是自己定义的
public interface UserMapper {
    @Select("SELECT * FROM users")
    @Results({
            @Result(property = "userSex",  column = "user_sex", javaType = UserSexEnum.class),
            @Result(property = "nickName", column = "nick_name")
    })
    List<UserEntity> getAll();

    @Select("SELECT * FROM users WHERE id = #{id}")
    @Results({
            @Result(property = "userSex",  column = "user_sex", javaType = UserSexEnum.class),
            @Result(property = "nickName", column = "nick_name")
    })
    UserEntity getOne(int id);
    //使用@Param传参
    UserEntity findByName(@Param("nickName") String nickName);//id可以直接写

    @Insert("INSERT INTO users(userName,passWord,user_sex) VALUES(#{userName}, #{passWord}, #{userSex})")
    void insert(UserEntity user);
//    使用对象传参   只需要语句中的#{name}、#{age}就分别对应了User对象中的name和age属性

    @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(int id);
}

其中涉及到mybatis的传参方式,使用@Param传参,使用对象传参,还有使用map传参

还有使用Map
@Insert("INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES(" +
        "#{name, jdbcType=VARCHAR}, #{password, jdbcType=VARCHAR}, #{phone, jdbcType=VARCHAR})")
int insertByMap(Map<String, Object> map);

如果用map传参,使用这个的方式

    Map<String, Object> map = new HashMap<>();
        map.put("name","王五");
                map.put("password","23423");
                map.put("phone", "13400000000");
                userMapper.insertByMap(map);

配置详解可看这个

4.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(int id){
        UserEntity user = userMapper.getOne(id);
//        userMapper.findByName()
        return user;
    }

    @RequestMapping("/add")
    public void add(UserEntity user){
         userMapper.insert(user);
    }

    @RequestMapping("/update")
    public void update(UserEntity user){
        userMapper.update(user);
    }

    @RequestMapping(value = "/delete/{id}")
    public void delete(@PathVariable("id") int id){
        userMapper.delete(id);
    }

}

注意上面传参的方式哈。

5.我们test一下

@RunWith(SpringRunner.class)
@SpringBootTest
//回滚,即测试不会对数据库造成影响
//@Transactional
public class UserMapperTest {

    @Autowired
    private UserMapper UserMapper  ;//会报错无碍

    @Test
    public void testInsert() throws Exception {
        UserMapper.insert(new UserEntity("aa", "a123456", UserSexEnum.MAN));
        UserMapper.insert(new UserEntity("bb", "b123456", UserSexEnum.WOMAN));
        UserMapper.insert(new UserEntity("cc", "b123456", UserSexEnum.WOMAN));

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

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

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

无注解版这样就ok了,感觉很方便,主要都在那个mapper的java文件里了。

具体可以看我的源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值