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 int 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="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springmybaitis"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</bean>
<!--sql会话工厂-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="jdbcDataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.ptteng.dao.UserDao"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</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文件,见下图,总之,配置文件的目的,就是把这么一大波都整合为一体
我用jdbcDatesource和mybatis-config为原料生产出了sqlSessionFactory。下面我有用sqlSessionFactory叫UserDao为原料生产出了userDao,然后把userDao丢到程序里运行,可以这么理解:这个生产好userDao,就是自动装配private UserDao userDao这个后面小写的userDao。
<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//自动装配,装配了下面的userDao。private UserDao userDao;//限制符号,上面是default,然后是protected,public。代表开放尺度越来越大
//代表用log4j输出报错,测试结果,打出日志。级别四个,
//分别是debug,info,error,warn
Logger logger = Logger.getLogger(UserController.class);
// 根据姓名查询
@Test
public void getUserTest() {
List<User> user = userDao.getUser();
//logger.debug("查找结果" + user);
System.out.println(user);
}
List<User> users = userDao.getUser();
System.out.pritln(users)
@Test
public void deleteUserById() {
userDao.deleteUser(9);
}
@Test
public void updateUserTest() {
User user = new User();
user.setId(2);
user.setSex("女");
user.setUserName("吼哈哈妈");
user.setPassword("11113");
userDao.updateUser(user);
System.out.println(user);
}
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方法。
重新做了getter和setter方法,就可以了
明天的计划:考核任务一
遇到的问题:暂无
今天的收获:对任务一加深了理解
java任务二开始时间:2018.01.25
预计demo时间:2018.02.12
可能有延期风险,原因是:json看不懂,控制器的逻辑看不懂,所以又回看了java语法
禅道链接地址:http://task.ptteng.com/zentao/project-task-501.html
评论