解读mybatis+spring框架

public class User {
    private int id;
    private String userName;
    private String password;
    private String sex;
    public User(){}

解读:public是权限修饰符,在它之下,还有protected,default,private。protected ,default,private。

private这是类里面对属性的封装。id,userName,password,sex是四个属性,int,String是数据类型。public User(){}是构造器。我用private封装我的属性,这样类外面读取不到,但是我用public公开方法,方便外部类的调用。default是包里面可以调用,protected是包里面和子类也可以调用。

public interface UserDao {
        // public User getUser(User user);
        public List<User> getUser();
    public void addUser(User user);
     public void updateUser(User user);
     public void deleteUser(int id);
}

public List<User> gerUser();

public void addUser(User user);

public void updateUser(User user);

public void deleteUser(int id);

接口里面四个方法都是抽象方法,因为没有方法体。第一个括号里面没有参数,是因为它对应的SQL语句是select * from user,不需要参数,查询的是整个表。删除方法里面的参数是int id,是因为对应的SQL语句是delete from user where id = #{id}

addUser 方法里面的参数是(User user),是因为我的SQL语句涉及到了所有的属性,只能用user代替,而user的数据类型可以理解成User类。

解读任务一xml,spring配置

 <!-- 自动扫描 -->
    <context:component-scan base-package="com.ptteng.dao"/>

    <!-- 配置数据源 datasource就是数据源,DriverManagerDataSource驱动程序管理器数据源-->
    <bean id="jdbcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>org.gjt.mm.mysql.Driver</value>
        </property>
        <property name="url">
            <value>jdbc:mysql://localhost:3306/springmybaitis</value>
            <!--springmybaitis是我的数据库  -->
        </property>
        <property name="username">
            <value>root</value>
        </property>
        <property name="password">
            <value>1234</value>
        </property>
    </bean>
 <!--sql会话工厂-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="jdbcDataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
    </bean>
    <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="com.ptteng.dao.UserDao"></property>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    </bean>
</beans>

自动扫描哪里,其实不用加一个扫描dao的,因为dao不用扫描。service才需要扫描,@service一般会加在service类里面,主类的上面一行。  property是性质性能的意思

Session是会话的意思;configLocation是配置位置的意思,后面的value就是类似于路径,这段话的作用就是把数据源和mybatis-config整合起来。ref是参考的意思,至于为什么上面用class,中间用ref,下面用value,我也不知道。因为jdbcDatasource涉及到bean,所以就用ref

后面的目的就是把UserDao和sqlSessionFactory整合起来,SQLSessionFactory又把mybatis-config和数据源整合起来了,而mybatis-config里面又包含了UserDao.xml文件,见下图,总之,配置文件的目的,就是把这么一大波都整合为一体

 <configuration>
    <mappers>
      <mapper resource="UserDao.xml"/>
  </mappers>
</configuration> 结构
<mapper namespace="com.ptteng.dao.UserDao">
<select id="getUser" resultType="com.ptteng.model.User">
    SELECT * FROM user
</select>
<insert id="addUser" parameterType="com.ptteng.model.User" flushCache="true">
   INSERT INTO user (id,userName,password,sex) VALUES (#{id},#{userName},#{password},#{sex})
</insert>
<update id="updateUser" parameterType="com.ptteng.model.User">
    UPDATE user SET password=#{password} ,userName=#{userName},sex=#{sex} WHERE id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
    DELETE FROM user WHERE id=#{id}
</delete>
</mapper>

namespace就是命名空间,当然要找到UserDao类啊。

涉及到属性的就用参数类型,涉及到所有参数,就指向User;涉及到一个参数,就指向int或者string

@ContextConfiguration环境配置,位置指向类路径spring配置文件

@ContextConfiguration(locations={"classpath:ApplicationContext.xml"})
@RunWith(SpringJUnit4ClassRunner.class)//就是运行环境,也就是在spring环境下用junit4测试
public class UserController {
@Autowired//算是一种声明,代表告诉spring,我要取你的bean了
   private UserDao userDao;//限制符号,上面是default,然后是protected,public。代表开放尺度越来越大
    Logger logger =Logger.getLogger(UserController.class);//代表用log4j输出报错,测试结果,打出日志。级别四个,
  分别是debug,info,error,warn //    根据姓名查询
    @Test
    public void getUserTest(){
       List<User> users =userDao.getUser();
       logger.debug("查找结果"+ users);
        System.out.println(users);
    }
public void getUserTest(){

List<User> users = userDao.getUser();

System.out.pritln(users)

}
 
 
    //    通过id删除表中数据
    @Test
    public void deleteUserById(){
        userDao.deleteUser(9);
    }
public void deleteUserByIdTest(){

userDao.deleteDao(9);

    //        修改表中数据
    @Test
    public void updateUserTest(){
        User user = new User( );
        user.setSex("");
        user.setId(10);
        user.setUserName("龙妈");
        user.setPassword("11113");
        userDao.updateUser(user);
    }
public void updateUser(){

User user = new User();

user.setId(10);

user.setName("");

user.setPassword("");

user.setSex("");

userDao.updateUser(user);

System.out.pritln(user);

}

@Test
public void addUserTest(){
    User user = new User();
    user.setId(4);
    user.setSex("");
    user.setUserName("刘飞");
    user.setPassword("5856");
    userDao.addUser(user);
    System.out.println(user);

发生了一件事儿,居然只能输出姓名和密码,不能输出性别,查了之后才发现原来to String里面,没有进行sex的tostring方法。

猜你喜欢

转载自blog.csdn.net/weixin_41315469/article/details/79684846