mybatis开发流程
1.导包 mybatis,mysql-connector-java
2.写实体类
3.写接口
4.主配置文件
5.mapper映射文件
导包
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String name;
//这里故意不与数据一致
private String password;//数据库中是pwd
}
接口
public interface UserMapper {
public List<User> getAllUsers();
public int deleteUserById(int id);
public int updateUser(User user);
public int addUser(User user);
}
主配置文件
<?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 resource="db.properties"/>
<typeAliases>
<package name="com.xiehetao.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
mapper映射文件
<?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.xiehetao.mapper.UserMapper">
<resultMap id="userMapper" type="user">
<result property="password" column="pwd"/>
</resultMap>
<select id="getAllUsers" resultMap="userMapper">
select * from user
</select>
<delete id="deleteUserById">
delete from user where id= #{id}
</delete>
<update id="updateUser" parameterType="user">
update user
<set>
<if test="name != null">
name = #{name},
</if>
<if test="password != null">
pwd = #{password}
</if>
</set>
</update>
<insert id="addUser" >
insert into user (id,name,pwd) values(#{id},#{name},#{password})
</insert>
<!-- 第一种方法,这里是多对一情况-->
<resultMap id="studentTeacherMap" type="student">
<result property="" column=""/>
<result property="" column=""/>
<association property="teacher" column="t_id" select="getTeacherById"/>
</resultMap>
<select id="getTeacherById" resultMap="">
select * from teacher where id= #{id}
</select>
<!-- 第二种方法,这里是一对多情况-->
<resultMap id="studentTeacherMap" type="teacher">
<result property="" column=""/>
<result property="" column=""/>
<collection property="students" column="id" javaType="list" ofType="student">
<result property="" column=""/>
<result property="" column=""/>
</collection>
</resultMap>
</mapper>
//这里的一对多和多对一我没尝试过,不知道是否正确
spring主要知识点
IOC(控制反转)
实现方式
注解方式/xml文件配置方式/javaConfig方式
AOP(切面编程)
实现方式
注解方式/xml配置方式/javaConfig方式
1.xml配置方式
aop:config
2.注解方式
<context:component-scan base-package/>
aop:config
3.javaConfig方式
@Configuration
spring整合mybatis
- 导入包 mybatis mysql-connector-java mybatis-spring spring-jdbc
aspectjweaver spring-webmvc - 配置文件 spring数据源 mybatis-sqlsession工厂,mybatis-sqlsessiontemplate
- 写pojo
- 定义接口
- mybatis 配置文件和映射文件
导入包
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>
配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatisConfig.xml"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"/>
</bean>
<bean id="userMapperImpl" class="com.xiehetao.mapper.UserMapperImpl">
<constructor-arg ref="sqlSession"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
<aop:pointcut id="pc" expression="execution(* com.xiehetao.mapper.UserMapperImpl.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
</aop:config>
</beans>
mybatisconfig.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>
<package name="com.xiehetao.pojo"/>
</typeAliases>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
mapper.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.xiehetao.mapper.UserMapper">
<resultMap id="UserMap" type="com.xiehetao.pojo.User">
<result property="password" column="pwd"/>
</resultMap>
<select id="getAllUsers" resultMap="UserMap">
select * from user;
</select>
<update id="updateUser" parameterType="user">
update user
<set>
<if test="name != null">
name = #{name},
</if>
<if test="password != null">
pwd = #{password}
</if>
</set>
where id= #{id}
</update>
<delete id="deleteUserById" >
deletes from user where id=#{id}
</delete>
<insert id="addUser" parameterType="user">
insert into user (id,name,pwd) values(#{id},#{name},#{password})
</insert>
<select id="getUserById" resultMap="UserMap">
select * from user where id=#{id}
</select>
</mapper>
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String name;
private String password;
}
接口
public interface UserMapper {
public List<User> getAllUsers();
public int updateUser(User user);
public int deleteUserById(int id);
public int addUser(User user);
public User getUserById(int id);
}
接口实现类
public class UserMapperImpl implements UserMapper{
private SqlSessionTemplate sqlSession;
public UserMapperImpl(SqlSessionTemplate sqlSessionTemplate){
sqlSession = sqlSessionTemplate;
}
@Override
public List<User> getAllUsers() {
return sqlSession.getMapper(UserMapper.class).getAllUsers();
}
@Override
public int updateUser(User user) {
return sqlSession.getMapper(UserMapper.class).updateUser(user);
}
@Override
public int deleteUserById(int id) {
return sqlSession.getMapper(UserMapper.class).deleteUserById(id);
}
@Override
public int addUser(User user) {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int rslt = mapper.addUser(user);
mapper.deleteUserById(user.getId());
return rslt;
}
@Override
public User getUserById(int id) {
return sqlSession.getMapper(UserMapper.class).getUserById(id);
}
}
测试类
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapperImpl userMapperImpl = (UserMapperImpl) context.getBean("userMapperImpl");
User user = new User(5,"xht","121212121");
userMapperImpl.addUser(user);
}
}
spring整合mybatis注意点
- 配置数据库连接池
- 配置sqlsesionFactory
- 配置sqlsessionTemplate
- 配置事务管理器