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>.使用(同上)